决策树(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
那么算法是如何构建这一课决策树的呢?下面给出基本构造算法:可见整个树生成的过程其实是一个不断寻求最佳属性分割点,进行分割,直到满足停止准则而得到的一棵树,是一个迭代的过程。
算法:DT
输入:
- D,训练样本集合
- Attr_List,候选属性集合
- Attr_Sel_Method,选取最佳属性的方法
while( 不满足停止准则 ){
寻找最佳属性分割点;
分割节点;
}
输出:
- 一颗决策树
二、分裂准则
我们知道由于决策树迭代的性质,该算法需要在每一次迭代中找到一个最佳的属性,来对训练样本进行分类,那么如何从剩余的属性列表中选取最佳的属性(即如何设定分裂准则)呢,ID3,C4.5 和 CART 给出了自己不同的解决方案。
ID3,后来 Quinlan 再接再厉,发明了 C4.5 (ID3的后继)。1984年,多为统计学家 L.Breiman,J.Friedman,R.Olshen 和 C.Stone 出版了《Classification and Regression Trees》,提出了决策树的版本 CART
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 作为下一次属性分割的对象。
C4.5 算法中运用信息增益率来选取属性。之所以提出算法名称叫 C4.5 而不是 ID 3.1, ID 3.2 是因为决策树提出来后,太火爆了,学术界提出了很多改进版本(也可以看做是跟风之作),Quinlan 只好取了一个新名字,即 C4.5,它主要解决的问题有 2 个: a)ID3 无法对连续型属性进行分割;b)ID3 在属性划分时,更倾向于选择取值较多的属性。
SplitInfo(D)表示的属性分裂信息,而 Gain 依旧是 ID3 中的信息增益。
GainRatio(A)就是信息增益率,我们希望它越大越好。换句话说:每次通过计算,选取 GainRate( A ) 最大的属性 A 作为下一次属性分割的对象。
CART
CART 算法全称是 Classification and Regression Tree,顾名思义,它既能处理回归问题(此时它是回归树),又能处理分类问题(此时它是分类树),这里我着重讨论 CART 作为分类树时的情况。Gini 系数是一种类似于信息增益的东西,定义如下
Gini (D) 表示节点 D 的基尼系数。化简后的结果是 1- \sum( pi ^ 2 )。
注意, CART 在划分属性的时候是二分划分,也就是说节点 D 只可能划分为 D1 和 D2。
最终,选取基尼系数之差最大的属性 A 作为下一个划分的属性对象。
三、停止准则
决策树不可能无限制的划分,总有一个停下来的规则。基本规则是:当划分后的节点里都是同一类别,或者已经没有待划分的属性了。当然为了避免过拟合(Overfitting),人们想到了用阈值来控制属性的划分,即 minSplit 规定划分前节点包含最小实例数,minBucket 规定划分后叶子节点包含最小实例数。
四、决策树的后续
SLIQ(Supervised Learning In Quest)算法, SPRINT(Scalable PaRallelizable INduction of decision Trees )算法。采用预剪枝技术的 PUBLIC(A Decision Tree that Integrates Building and Pruning)算法等,另外,如随机树,随机森林等也在数据挖掘中占据着重要地位。
----------------