淘先锋技术网

首页 1 2 3 4 5 6 7

决策树可分为两类,一类是分类树(Classification Tree),主要用于处理离散的数据,比如性别、黑白、胖瘦这样的非连续变量。另一类是回归树(Regression Tree),主要用于处理连续的数据,比如年龄、身高、体重这样的连续变量。
经典ID3算法:
将具体步骤列出来,如下:
输入: 训练集 D=(x1,y1),(x2,y2),…,(xm,ym);   
属性集 A=a1,a2,a3,…,ad;
过程: 函数CreateTree(D,A)
生成节点node;
if D中样本全部属于同一类别C then
将node标记为C类叶节点; return
end if
if A=∅OR D中的样本在A上取值都相同 then
将node标记为叶节点,其类别标记为D中样本数量最多的类; return
end if
从A中选择最优的划分属性a∗;
for a∗a∗的每一个值av*do
为node节点生成一个分支;令Dv表示D中在a∗上取值为av∗的样本子集;
If Dv为空 then
将分支节点标记为叶节点,其类别标记为D中样本最多的类; return
else
以CreateTree(Dv,a∗)为分支节点
end if
end for
输出:以node为根节点的一棵决策树
在上文决策树具体步骤的描述中,最关键的部分应该是第8步,即从A中选择最优的划分属性a∗。为计算和分析最优划分属性,我们介绍以下概念:
1、信息熵我们希望每一次根据某个属性划分,得到的分支节点所包含的样本尽可能属于同一类别,即节点的“纯度”越来越高。在计算机领域,“信息熵”是度量样本集合纯度最常用的一种指标。假定当前样本集合D中第k类样本所占的比例为pk(k=1,2,…,|Y|),则D的信息熵定义为:`
在这里插入图片描述
Ent(D)的值越小,则D的纯度越高
1、信息增益再考虑到不同的分支节点所包含的样本数量不同,理应具有不同的权重,那么给分支赋予权重|Dv|/|D|,即样本数量越多的分支节点所具有的影响越大,于是得到属性a对样本集D进行划分所获得的“信息增益”(information gain):
在这里插入图片描述
信息增益越大,意味着用属性a进行划分所获得的“纯度提升”越大。Python实现ID3:采用周志华教授的《机器学习》中的实例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
步骤:输入数据集—>计算信息熵和选择最佳属性—>创造逻辑树—>计算叶子结点和树的深度—>画节点—>画箭头上的字—>画树。通过createPlt函数对各函数的调用,实现数据集进行可视化得:
在这里插入图片描述
在编码过程中,在“画节点”这步一度不能将汉字显示出来,经过百般挣扎最终找到了解决办法:
在createPlt.ax1.annotate方法中加入FontProperties属性,使其为:FontProperties=font;
在“画箭头上的字”也可用同种方法解决。
在这里插入图片描述
但是在经典ID3算法存在如下缺陷:1.信息增益准则对可取数值数目较多的属性有所偏好;2.只能处理离散变量的属性,对于类似于身高、体重、年龄、工资这样存在无限可能的连续数值毫无办法。