重新学了一遍周志华老师《机器学习》中的决策树,在此做个学习整理与总结吧。
决策树(decision tree)是一类常见的机器学习方法,用于分类问题。一般来说,一颗决策树包含一个根节点,若干个内部节点和若干个叶子节点,叶子节点对应于决策结果,根节点和内部节点则对应于一个属性测试,从根节点到每个叶节点的路径对应了一个判定测试序列。决策树学习的目的是为了产生一颗泛化能力强的决策树。
如上图,则是一个典型的二分类决策树,那么自然而然就会想到,根节点和内部节点该怎么选择呢?决策树按照节点选择规则不同,共分三种:ID3决策树、C4.5决策树、CART决策树,下面将以如下的西瓜数据集为例,详细介绍这三种决策树。
在介绍各种决策树之前,先介绍一个概念:“信息熵”,信息熵是度量样本集合纯度的一种指标,假设当前样本集合
D
中第
Ent(D) 的值越小,则说明 D 的纯度越高
ID3决策树
从西瓜数据集表中可以看出,该数据集包含17个样本,标记为是否为好瓜,其中,正例为标记为好瓜的数据,占
Ent(D)=−∑2k=1pklog2pk=−(817log2817+917log2917)
=0.998
ID3决策树则是以“信息增益”为判定标准,来对属性进行划分的,属性
a
对样本集
Gain(D,a)=Ent(D)−∑Vv=1|Dv||D|Ent(Dv)
一般而言,信息增益越大,则意味着使用属性
a
来进行划分所获得的“纯度提升”越大。
对于西瓜数据集,我们要计算当前属性集合{色泽,根蒂,敲声,文理,脐部,触感}中每个属性的信息增益,以属性“色泽”为例,它有3个可能的取值:{青绿,乌黑,浅白}。若使用该属性对
子集
D1
包含编号为{1,4,6,10,13,17}的6个样例,其中正例占
p1=36
,反例占
p2=36
;
子集
D2
包含编号为{2,3,7,8,9,15}的6个样例,其中正例占
p1=46
,反例占
p2=26
;
子集
D3
包含编号为{5,11,12,14,16}的5个样例,其中正例占
p1=15
,反例占
p2=45
;
则,根据信息熵公式,可计算出用“色泽”划分之后所获得的3个分支节点的信息熵为:
Ent(D1)=−(36log236+36log236)=1.000
;
Ent(D2)=−(46log246+26log226)=0.918
;
Ent(D3)=−(15log215+45log245)=0.722
;
于是,可算出属性“色泽”的信息增益为
Gain(D,色泽)=Ent(D)−∑3v=1|Dv||D|Ent(Dv)=0.998−(617∗1.000+617∗0.918+517∗0.722)=0.109
类似的,可以计算出其他属性的信息增益,然后再根据信息增益最大的属性作为根节点,对数据进行划分,然后,决策树将对每个分支结点做进一步划分。
C4.5决策树
实际上,信息增益准则对可取值数目较多的属性有所偏好,为了减少这种偏好带来的不利影响,C4.5决策树算法不直接使用信息增益,而是使用“增益率”来选择最优划分属性,增益率定义为:
Gainratio(D,a)=Gain(D,a)IV(a)
其中,
IV(a)=−∑Vv=1|Dv||D|log2|Dv||D|
称为属性
a
的“固有值”,属性
以属性“色泽”为例,可算出属性“色泽”的信息增益率为
Gainratio(D,色泽)=Gain(D,色泽)IV(色泽)=0.109−(617∗log2617+617∗log2617+517∗log2517)=0.1091.580=0.0690
类似的,可以计算出其他属性的信息增益率,需要注意,增益率准则对可取值数目较少的属性有所偏好,因此,C4.5算法并不是直接选择增益率最大的候选划分属性,而是先从候选集中找出信息增益高于平均水平的属性,然后再从中选择增益率最高的。
CART决策树
CART决策树使用“基尼指数”来选择划分属性,数据集
D
的纯度可用基尼值来度量:
直观来说,
Gini(D)
反映了从数据集
D
中随机抽取两个样本,其类别标记不一致的概率,因此,
属性
Giniindex(D,a)=∑Vv=1|Dv||D|Gini(Dv)
以属性“色泽”为例,可算出属性“色泽”各个取值的基尼值为
Gini(D1)=1−∑mk=1pk2=1−362−362=0.5
Gini(D2)=1−∑mk=1pk2=1−462−262=0.444
Gini(D3)=1−∑mk=1pk2=1−152−452=0.6
Giniindex(D,色泽)=∑3v=1|Dv||D|Gini(Dv)=617∗0.5+617∗0.444+517∗0.6=0.5096
类似的,可以计算出其他属性的基尼指数,然后选择那个划分后基尼指数最小的属性作为最优划分属性。