决策树(Design Tree)是数据挖掘的一种基本分类算法(Classification Algorithm),属于有监督学习(supervised learning),即它的训练数据是要带标记的。适用的场景就是一系列实例,每个实例属于不同的类别(称为Class 或 Label),且都可以被一系列的属性(称为Features 或 Attributes)所表示,当我们需要判断新来的实例的类别,我们就可以运用到决策树这个算法了。





一、分类思想





如果该属性是nominal,则每条边代表不同的值;如果该属性是numeric,则每条边代表不同的取值范围),叶子节点代表最终分成的类。





包含了 outlook(天气),temperature(温度),humidity(湿度),windy(是否有风)的属性,也包含一个类别标记,就是 play(是否出去玩,作为类别),这些训练样本展示了属性和类别之间的复杂关系。





数据挖掘和决策支持 数据挖掘与决策分析_数据挖掘






那么,现在我们的问题来了,当属性值是的时候,是否可以预测最终出去玩了没有(即 play 是 yes 还是 no)。





不要慌,决策树帮你预测,运用 C4.5 算法(决策树算法的一种)建立的决策树如下所示:





数据挖掘和决策支持 数据挖掘与决策分析_数据挖掘和决策支持_02





outlook,如果是 overcast 就 play,如果是 sunny 或者是 rainy 就分别继续判断 humiditywindy 这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





数据挖掘和决策支持 数据挖掘与决策分析_机器学习_03




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)。



数据挖掘和决策支持 数据挖掘与决策分析_机器学习_04




Info_A(D) 计算的是按照属性 A 划分后,熵的期望值。





数据挖掘和决策支持 数据挖掘与决策分析_决策树_05




Gain(A) 定义为信息增益,是按照属性 A 来划分样本后,前后熵之差,可以认为差值越大,不确定性下降的越多,得到的分类结果越纯。我们的目标就是选取每一次是的划分后的分类结果最纯的属性。换句话说:每次通过计算,选取 Gain( A ) 最大的属性 A 作为下一次属性分割的对象。





C4.5 算法中运用信息增益率来选取属性。之所以提出算法名称叫 C4.5 而不是 ID 3.1, ID 3.2 是因为决策树提出来后,太火爆了,学术界提出了很多改进版本(也可以看做是跟风之作),Quinlan 只好取了一个新名字,即 C4.5,它主要解决的问题有 2 个: a)ID3 无法对连续型属性进行分割;b)ID3 在属性划分时,更倾向于选择取值较多的属性。





数据挖掘和决策支持 数据挖掘与决策分析_决策树_06



SplitInfo(D)表示的属性分裂信息,而 Gain 依旧是 ID3 中的信息增益。




数据挖掘和决策支持 数据挖掘与决策分析_机器学习_07




GainRatio(A)就是信息增益率,我们希望它越大越好。换句话说:每次通过计算,选取 GainRate( A ) 最大的属性 A 作为下一次属性分割的对象。





CART





CART 算法全称是 Classification and Regression Tree,顾名思义,它既能处理回归问题(此时它是回归树),又能处理分类问题(此时它是分类树),这里我着重讨论 CART 作为分类树时的情况。Gini 系数是一种类似于信息增益的东西,定义如下





数据挖掘和决策支持 数据挖掘与决策分析_数据挖掘和决策支持_08





Gini (D) 表示节点 D 的基尼系数。化简后的结果是 1- \sum( pi ^ 2 )。





数据挖掘和决策支持 数据挖掘与决策分析_机器学习_09





注意, CART 在划分属性的时候是二分划分,也就是说节点 D 只可能划分为 D1 和 D2。

数据挖掘和决策支持 数据挖掘与决策分析_决策树_10




最终,选取基尼系数之差最大的属性 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)算法等,另外,如随机树,随机森林等也在数据挖掘中占据着重要地位。





----------------