数据挖掘资料

https://blog.csdn.net/baimafujinji/article/details/53269040算法

在2006年12月召开的 IEEE 数据挖掘国际会议上(ICDM, International Conference on Data Mining),与会的各位专家选出了当时的十大数据挖掘算法( top 10 data mining algorithms ),能够参见文献【1】。本博客已经介绍过的位列十大算法之中的算法包括:数据结构

决策树模型是一类算法的集合,在数据挖掘十大算法中,具体的决策树算法占有两席位置,即C4.5和CART算法。本文主要介绍分类回归树(CART,Classification And Regression Tree)也属于一种决策树,但愿你在阅读本文以前已经了解前文已经介绍过以内容:dom

欢迎关注白马负金羁的博客 http://blog.csdn.net/baimafujinji,为保证公式、图表得以正确显示,强烈建议你从该地址上查看原版博文。本博客主要关注方向包括:数字图像处理、算法设计与分析、数据结构、机器学习、数据挖掘、统计分析方法、天然语言处理。机器学习


CART生成

CART假设决策树是二叉树,内部结点特征的取值为“是”和“否”,左分支是取值为“是”的分支,右分支是取值为“否”的分支。这样的决策树等价于递归地二分每一个特征,将输入空间即特征空间划分为有限个单元,并在这些单元上肯定预测的几率分布,也就是在输入给定的条件下输出的条件几率分布。函数

CART算法由如下两步组成:学习

  1. 决策树生成:基于训练数据集生成决策树,生成的决策树要尽可能大;
  2. 决策树剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,这时损失函数最小做为剪枝的标准。

CART决策树的生成就是递归地构建二叉决策树的过程。CART决策树既能够用于分类也能够用于回归。本文咱们仅讨论用于分类的CART。对分类树而言,CART用Gini系数最小化准则来进行特征选择,生成二叉树。 CART生成算法以下:测试

输入:训练数据集DD,中止计算的条件: 
输出:CART决策树。
大数据

根据训练数据集,从根结点开始,递归地对每一个结点进行如下操做,构建二叉决策树:atom

  1. 设结点的训练数据集为DD,计算现有特征对该数据集的Gini系数。此时,对每个特征AA,对其可能取的每一个值aa,根据样本点对A=aA=a的测试为“是”或 “否”将DD分割成D1D1和D2D2两部分,计算A=aA=a时的Gini系数。
  2. 在全部可能的特征AA以及它们全部可能的切分点aa中,选择Gini系数最小的特征及其对应的切分点做为最优特征与最优切分点。依最优特征与最优切分点,从现结点生成两个子结点,将训练数据集依特征分配到两个子结点中去。
  3. 对两个子结点递归地调用步骤l~2,直至知足中止条件。
  4. 生成CART决策树。

算法中止计算的条件是结点中的样本个数小于预约阈值,或样本集的Gini系数小于预约阈值(样本基本属于同一类),或者没有更多特征。spa


一个具体的例子

下面来看一个具体的例子。咱们使用《数据挖掘十大算法之决策树详解(1)》中图4-6所示的数据集来做为示例,为了便于后面的叙述,咱们将其再列出以下: 


 

 

首先对数据集非类标号属性{是否有房,婚姻情况,年收入}分别计算它们的Gini系数增益,取Gini系数增益值最大的属性做为决策树的根节点属性。根节点的Gini系数 

 
Gini()=1(310)2(710)2=0.42Gini(是否拖欠贷款)=1−(310)2−(710)2=0.42


当根据是否有房来进行划分时,Gini系数增益计算过程为 

 


 

 

 
Gini()=1(03)2(33)2=0Gini()=1(37)2(47)2=0.4898Gini(左子节点)=1−(03)2−(33)2=0Gini(右子节点)=1−(37)2−(47)2=0.4898

 

 
Δ{}=0.42710×0.4898310×0=0.077Δ{是否有房}=0.42−710×0.4898−310×0=0.077

 

若按婚姻情况属性来划分,属性婚姻情况有三个可能的取值{married,single,divorced},分别计算划分后的

  • {married} | {single,divorced}
  • {single} | {married,divorced}
  • {divorced} | {single,married}

的Gini系数增益。 
当分组为{married} | {single,divorced}时,SlSl表示婚姻情况取值为married的分组,SrSr表示婚姻情况取值为single或者divorced的分组 

 
Δ{}=0.42410×0610×[1(36)2(36)2]=0.12Δ{婚姻情况}=0.42−410×0−610×[1−(36)2−(36)2]=0.12


当分组为{single} | {married,divorced}时, 

 
Δ{}=0.42410×0.5610×[1(16)2(56)2]=0.053Δ{婚姻情况}=0.42−410×0.5−610×[1−(16)2−(56)2]=0.053


当分组为{divorced} | {single,married}时, 

 
Δ{}=0.42210×0.5810×[1(28)2(68)2]=0.02Δ{婚姻情况}=0.42−210×0.5−810×[1−(28)2−(68)2]=0.02


对比计算结果,根据婚姻情况属性来划分根节点时取Gini系数增益最大的分组做为划分结果,也就是{married} | {single,divorced}。

 

最后考虑年收入属性,咱们发现它是一个连续的数值类型。咱们在前面的文章里已经专门介绍过如何应对这种类型的数据划分了。对此还不是很清楚的朋友能够参考以前的文章,这里再也不赘述。

对于年收入属性为数值型属性,首先须要对数据按升序排序,而后从小到大依次用相邻值的中间值做为分隔将样本划分为两组。例如当面对年收入为60和70这两个值时,咱们算得其中间值为65。假若以中间值65做为分割点。SlSl做为年收入小于65的样本,SrSr表示年收入大于等于65的样本,因而则得Gini系数增益为 

 
Δ()=0.42110×0910×[1(69)2(39)2]=0.02Δ(年收入)=0.42−110×0−910×[1−(69)2−(39)2]=0.02


其余值的计算同理可得,咱们再也不逐一给出计算过程,仅列出结果以下(最终咱们取其中使得增益最大化的那个二分准则来做为构建二叉树的准则): 

 



注意,这与咱们以前在《数据挖掘十大算法之决策树详解(1)》中获得的结果是一致的。最大化增益等价于最小化子女结点的不纯性度量(Gini系数)的加权平均值,以前的表里咱们列出的是Gini系数的加权平均值,如今的表里给出的是Gini系数增益。如今咱们但愿最大化Gini系数的增益。根据计算知道,三个属性划分根节点的增益最大的有两个:年收入属性和婚姻情况,他们的增益都为0.12。此时,选取首先出现的属性做为第一次划分。

 

接下来,采用一样的方法,分别计算剩下属性,其中根节点的Gini系数为(此时是否拖欠贷款的各有3个records)

 
Gini()=1(36)2(36)2=0.5Gini(是否拖欠贷款)=1−(36)2−(36)2=0.5


与前面的计算过程相似,对因而否有房属性,可得 

 
Δ{}=0.546×[1(34)2(14)2]26×0=0.25Δ{是否有房}=0.5−46×[1−(34)2−(14)2]−26×0=0.25


对于年收入属性则有:

 

 


 

 

最后咱们构建的CART以下图所示:

 


 

 

最后咱们总结一下,CART和C4.5的主要区别:

  • C4.5采用信息增益率来做为分支特征的选择标准,而CART则采用Gini系数;
  • C4.5不必定是二叉树,但CART必定是二叉树。

关于过拟合以及剪枝

决策树很容易发生过拟合,也就是因为对train数据集适应得太好,反而在test数据集上表现得很差。这个时候咱们要么是经过阈值控制终止条件避免树形结构分支过细,要么就是经过对已经造成的决策树进行剪枝来避免过拟合。另一个克服过拟合的手段就是基于Bootstrap的思想创建随机森林(Random Forest)。关于剪枝的内容能够参考文献【2】以了解更多,若是有机会我也可能在后续的文章里讨论它。

相关文章
相关标签/搜索