决策树(Design Tree)是数据挖掘的一种基本分类算法(Classification Algorithm),属于有监督学习(supervised learning),即它的训练数据是要带标记的。适用的场景就是一系列实例,每个实例属于不同的类别(称为Class 或 Label),且都可以被一系列的属性(称为Features 或 Attributes)所表示,当我们需要判断新来的实例的类别,我们就可以运用到决策树这个算法了。
一、分类思想
该算法的实质就像它的名字一样,建立一棵具有分类能力的树的模型,每一个节点代表一个属性,每一条边代表该属性的一个取值(
如果该属性是nominal,则每条边代表不同的值;如果该属性是numeric,则每条边代表不同的取值范围),叶子节点代表最终分成的类。
例如,我们现在有一个数据集,它
包含了 outlook(天气),temperature(温度),humidity(湿度),windy(是否有风)的属性,也包含一个类别标记,就是 play(是否出去玩,作为类别),这些训练样本展示了属性和类别之间的复杂关系。
那么,现在我们的问题来了,当属性值是的时候,是否可以预测最终出去玩了没有(即 play 是 yes 还是 no)。
不要慌,决策树帮你预测,运用 C4.5 算法(决策树算法的一种)建立的决策树如下所示:
根据这个决策树,我们知道当拿到一个实例的时候,可以首先判断
outlook,如果是 overcast 就 play,如果是 sunny 或者是 rainy 就分别继续判断
humidity 和
windy 这2个属性,以此类推,那么对于之前的那个问题,
中 outlook 属性值是 rainy,windy 属性值是 FALSE,那么最后的叶子节点是 yes,也就是决策树预测结果是 play = yes,出去玩!
那么算法是如何构建这一课决策树的呢?下面给出基本构造算法:可见整个树生成的过程其实是一个不断寻求最佳属性分割点,进行分割,直到满足停止准则而得到的一棵树,是一个迭代的过程。
算法:DT
输入:
- D,训练样本集合
- Attr_List,候选属性集合
- Attr_Sel_Method,选取最佳属性的方法
while( 不满足停止准则 ){
寻找最佳属性分割点;
分割节点;
}
输出:
- 一颗决策树
二、分裂准则
我们知道由于决策树迭代的性质,该算法需要在每一次迭代中找到一个最佳的属性,来对训练样本进行分类,那么如何从剩余的属性列表中选取最佳的属性(即如何设定分裂准则)呢,ID3,C4.5 和 CART 给出了自己不同的解决方案。
在20世纪70到80年代,机器学习的研究者 J.Ross Quinlan 开发了决策树算法,称之为迭代二分器
ID3,后来 Quinlan 再接再厉,发明了
C4.5 (ID3的后继)。1984年,多为统计学家 L.Breiman,J.Friedman,R.Olshen 和 C.Stone 出版了《Classification and Regression Trees》,提出了决策树的版本
CART ,值得注意的是他们的主要区别就在于如何选取最佳属性上。
1)在
ID3 中,用信息增益作为比较来选取属性,即选取信息增益最大的属性。
Info(D)也称作节点 D 的熵,是样本期望的信息值。我们可以这样理解,熵代表着分类的“不确定性”。举个例子,当一件事情的 2 个结果的概率分别是 0.5 时,Info(D) = -(0.5*log(0.5) + 0.5*log(0.5)) = 1;当 2 个结果的概率分别是 0 和 1 时,Info(D) = 0。某种程度上证明熵越小,事情越确定(0 比 1);熵越大,事情越不确定(0.5 比 0.5)。
Info_A(D) 计算的是按照属性 A 划分后,熵的期望值。
Gain(A) 定义为信息增益,是按照属性 A 来划分样本后,前后熵之差,可以认为差值越大,不确定性下降的越多,得到的分类结果越纯。我们的目标就是选取每一次是的划分后的分类结果最纯的属性。换句话说:每次通过计算,选取 Gain( A ) 最大的属性 A 作为下一次属性分割的对象。
2)Quinlan 在改进了 ID3 后,提出的
C4.5 算法中运用信息增益率来选取属性。之所以提出算法名称叫 C4.5 而不是 ID 3.1, ID 3.2 是因为决策树提出来后,太火爆了,学术界提出了很多改进版本(也可以看做是跟风之作),Quinlan 只好取了一个新名字,即 C4.5,它主要解决的问题有 2 个:
a)ID3 无法对连续型属性进行分割;b)ID3 在属性划分时,更倾向于选择取值较多的属性。
GainRatio(A)就是信息增益率,我们希望它越大越好。换句话说:每次通过计算,选取 GainRate( A ) 最大的属性 A 作为下一次属性分割的对象。
3)
CART 算法用基尼指数(Gini index)来选取最佳属性。
CART 算法全称是 Classification and Regression Tree,顾名思义,它既能处理回归问题(此时它是回归树),又能处理分类问题(此时它是分类树),这里我着重讨论 CART 作为分类树时的情况。Gini 系数是一种类似于信息增益的东西,定义如下
Gini (D) 表示节点 D 的基尼系数。化简后的结果是 1- \sum( pi ^ 2 )。
最终,选取基尼系数之差最大的属性 A 作为下一个划分的属性对象。
三、停止准则
决策树不可能无限制的划分,总有一个停下来的规则。基本规则是:当划分后的节点里都是同一类别,或者已经没有待划分的属性了。当然为了避免过拟合(Overfitting),人们想到了用阈值来控制属性的划分,即 minSplit 规定划分前节点包含最小实例数,minBucket 规定划分后叶子节点包含最小实例数。
四、决策树的后续
当 CART,ID3,C4.5 出来后,(二十多年前的)人们并没有就此满足,后续仍有大量的改进版本出现。如能够处理大规模数据的
SLIQ(Supervised Learning In Quest)算法,
SPRINT(Scalable PaRallelizable INduction of decision Trees )算法。采用预剪枝技术的
PUBLIC(A Decision Tree that Integrates Building and Pruning)算法等,另外,如随机树,随机森林等也在数据挖掘中占据着重要地位。
----------------
【参考】