【ML】决策树(Decision tree)原理 + 实践 (基于sklearn)
【ML】决策树(Decision tree)原理 + 实践 (基于sklearn)
- 原理介绍
- 简要介绍
- 原理
- 得分函数(信息熵)
- 实战
- 数据集
- 数据处理
- 训练
- 预测+评估
- 绘制决策树
原理介绍
简要介绍
决策树算法是一个分类算法(监督学习),通过训练会获得一颗树形的分类模型。树的每一个非叶子节点都是一个判断条件,叶子节点是一个分类。
举个例子:我打算出去玩,我会先看看明天天气怎么样,如果下雨,我就不出去玩了【叶子节点】,如果不下雨,那么我再看看温度怎么样,低于10度就不出去玩了【叶子节点】,10度及以上则出去玩【叶子节点】。
原理
那么怎么获得这棵树呢?
假设一组数据有n个特征,我们想要高效的进行判断,会希望根节点是最具有区分度的,即如果我能通过根节点就分类成功最好。如果无法通过根节点进行分类,那么能通过第二层节点分类成功也不错。以此类推,通过尽量少的节点进行分类。
如何获得最有区分度的根节点呢?其实就是找到一个最具区分度的特征。我们假设我们有一个函数,你把每个特征数据穿给它,它便可以计算出一个分数,这个分数越大,代表特征越有区分度。
函数逻辑比较复杂,放到后面单独说,假设我们已经有了这个函数,那么我首先通过第一轮计算,选出了n个特征中最具区分度的特征A。假设A可以被分为3类(三种类型的数据,比如A特征表示大小,数据中有:大、中、小三种),则我们将A最为根节点,并向下延伸产生3个分支。并且按照A的三个分类将数据分为三组,去掉A特征,计算剩余特征中最具区分度的特征。以此类推形成树。
是否继续向下划分的判断依据是:
- 是否某一特征下的label都一致,如果一致,则不在继续往下区分(因为再怎么分,label都不变了)。
- 没有更多的特征进行划分,则结束(看当前特征哪个label占比更高则结果为此label)
得分函数(信息熵)
这个得分函数常见的有三种:ID3,C4.5,CART,这里介绍其中一种:ID3.
ID3的核心是: 信息熵。何为信息熵呢?我们都学过熵增现象,比如你滴一滴墨水到一杯清水里,墨水会散开到整杯水,且不会自动聚拢。而信息熵所描绘的就是一个信息的确定性,类比一下,如果一滴墨汁滴到一滴水里,那么还是乌黑,我们很容易确定这是墨汁。但如果把一滴水滴到一个大水缸里,那你还能确定当前水缸里的是墨汁吗?所以:
- 信息熵越大,则信息的确定性越低。
- 信息熵越小,则信息的确定性越高。
再回到我们上面原理部分的描述,我们要的是确定性高的特征,即最好当前节点(特征)就能判别出来结果,所以我们要求信息熵尽可能的小,即当前特征的确定性越高越好。那怎么计算信息熵呢?很早之前伟大的香农博士就已经帮我们定义好了计算信息熵的方法:
H(x)=−∑imp(x)log2p(x)H(x)=-\sum_{i}^{m}p(x)\log_{2}{p(x)}H(x)=−∑imp(x)log2p(x)
此处的p(x)表示概率。这里假设特征A有三类数据:a,b,c。
- a中有3条数据,1条数据对应分类1,2条数据对应分类二。
- b中有4条数据,2条数据对应分类1,2条数据对应分类二。
- c中有4条数据,1条数据对应分类1,3条数据对应分类二。
则有A的信息熵为:
311∗(−13∗log213−23∗log223)+411∗(−24∗log224−24∗log224)+411∗(−14∗log214−34∗log234)\frac{3}{11} * (-\frac{1}{3}*\log_{2}{\frac{1}{3}} -\frac{2}{3}*\log_{2}{\frac{2}{3}}) + \frac{4}{11} * (-\frac{2}{4}*\log_{2}{\frac{2}{4}} -\frac{2}{4}*\log_{2}{\frac{2}{4}}) + \frac{4}{11} * (-\frac{1}{4}*\log_{2}{\frac{1}{4}} -\frac{3}{4}*\log_{2}{\frac{3}{4}}) 113∗(−31∗log231−32∗log232)+114∗(−42∗log242−42∗log242)+114∗(−41∗log241−43∗log243)
实战
数据集
鸢尾花数据集:https://www.kaggle.com/datasets/himanshunakrani/iris-dataset
数据处理
origin_data = pd.read_csv("/kaggle/input/iris-dataset/iris.csv")
origin_data.loc[:,'species'].value_counts()
data = origin_data.replace({'species':{'setosa':1,'versicolor':2,'virginica':3}})
data.head()
X = data.drop(columns=['species'])
y = data.loc[:,'species']
训练
from sklearn import tree
model = tree.DecisionTreeClassifier(criterion='entropy', min_samples_leaf=5)
model.fit(X,y)
- criterion=‘entropy’ : 使用信息熵方式计算(默认)
- min_samples_leaf=5:每次向下进行分类,样本数最少为5个
预测+评估
y_predict = model.predict(X)from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y,y_predict)
print(accuracy)
输出:0.9733333333333334
绘制决策树
from matplotlib import pyplot as plt
plt.figure(figsize=(10,10))
tree.plot_tree(model, filled=True, feature_names=['sepal_length','sepal_width','petal_length','petal_width'],class_names=['setosa','versicolor','virginica'])
- filled: 是否填充颜色
- feture_names: 按原列表顺序写
- class_names: 处理后的数字升序排列后对应的名称
【ML】决策树(Decision tree)原理 + 实践 (基于sklearn)相关推荐
- 机器学习方法(四):决策树Decision Tree原理与实现技巧
欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入. 前面三篇写了线性回归,lass ...
- 决策树 (Decision Tree) 原理简述及相关算法(ID3,C4.5)
Decision Tree 决策树: 决策树是属于机器学习监督学习分类算法中比较简单的一种,决策树是一个预测模型:他代表的是对象属性与对象值之间的一种映射关系.树中每个节点表示某个对象,而每个分叉路径 ...
- Python数据挖掘入门与实践 第三章 用决策树预测获胜球队(一)pandas的数据预处理与决策树(Decision tree)
作为一个NBA球迷,看到这一章还是挺激动的. 不过内容有点难,研究了半天... 要是赌球的,用这章的预测+凯利公式,是不是就能提升赢钱概率了? 数据预处理 回归书本内容,既然要分析,首先需要有数据: ...
- 机器学习算法实践:决策树 (Decision Tree)(转载)
前言 最近打算系统学习下机器学习的基础算法,避免眼高手低,决定把常用的机器学习基础算法都实现一遍以便加深印象.本文为这系列博客的第一篇,关于决策树(Decision Tree)的算法实现,文中我将对决 ...
- Machine Learning | (7) Scikit-learn的分类器算法-决策树(Decision Tree)
Machine Learning | 机器学习简介 Machine Learning | (1) Scikit-learn与特征工程 Machine Learning | (2) sklearn数据集 ...
- 决策树Decision Tree 和随机森林RandomForest基本概念(一)
文章目录 一.决策树介绍 1.1 什么是决策树 1.2 决策树种类 1.3 决策树学习过程 1.4 Entropy(熵) 1.5 information gain(信息增益) 1.6 信息论 1.8 ...
- 决策树分类python代码_分类算法-决策树 Decision Tree
决策树(Decision Tree)是一个非参数的监督式学习方法,决策树又称为判定树,是运用于分类的一种树结构,其中的每个内部节点代表对某一属性的一次测试,每条边代表一个测试结果,叶节点代表某个类或类 ...
- 决策树Decision Tree+ID3+C4.5算法实战
决策树Decision Tree 决策树的三种算法: 举个栗子: 熵entropy的概念: 信息熵越大,不确定性越大.信息熵越小,不确定性越小. 其实就是排列组合之中的概率,概率相乘得到其中一个组合, ...
- 第六章.决策树(Decision Tree)—CART算法
第六章.决策树(Decision Tree) 6.2 CART算法 CART决策树的生成就是递归地构建二叉决策树的过程.CART用基尼(Gini)系数最小化准则来进行特征选择,生成二叉树. 1.Gin ...
- 决策树(Decision Tree)简介
决策树(Decision Tree)及其变种是另一类将输入空间分成不同的区域,每个区域有独立参数的算法.决策树分类算法是一种基于实例的归纳学习方法,它能从给定的无序的训练样本中,提炼出树型的分类模型. ...
最新文章
- PCA(主成分分析)+SVD(奇异值分解)+区别
- 从“人脸”到“狗脸”,AI也要去宠物经济分杯羹?
- 中国大唐集团公司在役及在建资产分布在全国31个省区市以及境外
- LVM管理-元数据及分区表的恢复
- php unable to save,php – Laravel save()未定义
- Android中的AsyncTask异步任务的简单介绍
- matlab进行特征缩放,机器学习中(Feature Scaling)特征缩放处理的matlab实现方式
- Android自定义View之刻度尺
- 潜在语义索引(Latent Semantic Indexing, LSI)——快速教程
- 安装JDK并配置环境变量(详细图文介绍)
- Android支付宝财富界面,10分钟带你看懂支付宝的交互设计(二)
- KBL406-ASEMI整流桥KBL406
- 新手网站制作教程:网站建设流程及步骤有哪些?
- php 指纹验证失败,为什么手指沾了水,指纹识别就会失效?液体会导致指纹解锁失败?...
- 阿里p7大手子测试笔记:一线互联网大厂面试问题吃透,巧过面试关
- 好用速度又快,多御安全浏览器下载安装教程
- Jedis 读写效率测试 hgetAll hmset
- 微信小程序中如何引用weUI(踩坑记录)
- 电信联通涉垄断被指因监管落后 处罚或不了了之
- 我认识的林家翘先生 转载
热门文章
- yum错误:Cannot retrieve repository metadata (repomd.xml) for repository解决方法
- 稀疏索引、密集索引、聚簇索引、非聚簇索引
- 【Linux】基础常见指令
- 计算机职称级别一览表,2017高会《职称计算机》Word 2003:多级列表
- 使用openssl 转换pkcs12证书为pem格式
- 基于 FPGA 的便携式 DDS 信号发生器与示波器
- html实现新闻滚动效果,jQuery实现新闻播报滚动及淡入淡出效果示例
- 美学评价:Image Aesthetic Assessment: An Experimental Survey(计算机视觉美学评估综述)
- vue3中使用swiper7
- c++练习4) 编写程序把华氏温度转换为摄氏温度,公式为 C=5/9*(F-32)