数据挖掘十大算法之决策树详解(2)

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

由于原文较长,我尝试把它们分散成几篇。本文是决策树模型系列中的第二篇,但愿你在阅读本文以前已经对《数据挖掘十大算法之决策树详解(1)》中以内容有较深刻理解。决策树模型是一类算法的集合,在数据挖掘十大算法中,具体的决策树算法占有两席位置,即C4.5和CART算法,本文都会介绍到它们。node

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


ID3算法

ID3和C4.5都是由澳大利亚计算机科学家Ross Quinlan开发的决策树构建算法,其中C4.5是在ID3上发展而来的。下面的算法描述主要出自文献【3】。数据结构

ID3算法的核心是在决策树各个结点上应用信息增益准则选择特征,递归地构建决策树。具体方法是:从根结点(root node)开始,对结点计算全部可能的特征的信息增益,选择信息增益最大的特征做为结点的特征,由该特征的不一样取值创建子结点;再对子结点递归地调用以上方法,构建决策树;直到全部特征的信息增益均很小或没有特征能够选择为止。最后获得一棵决策树。ID3至关于用极大似然法进行几率模型的选择。 下面咱们给出一个更加正式的ID3算法的描述:机器学习

输入:训练数据集D,特征集A,阈值ϵ; 
输出:决策树T
函数

  1. D中全部实例属于同一类Ck,则T为单结点树,并将类Ck做为该结点的类标记,返回T工具

  2. A=,则T为单结点树,并将D中实例数最大的类Ck做为该结点的类标记,返回T;学习

  3. 不然,计算A中各特征对D的信息增益,选择信息增益最大的特征Ag; 
    (1) 若是Ag的信息增益小于阈值ϵ,则置T为单结点树,并将D中实例数最大的类Ck做为该结点的类标记,返回T; 
    (2) 不然,对Ag的每一可能值ai,依Ag=aiD分割为若干非空子集Di,将Di中实例数最大的类做为标记,构建子结点,由结点及其子结点构成树T,返回T
    测试

  4. 对第i个子结点,以Di为训练集,以A{Ag}为特征集,递归地调用步骤(1)~(3),获得子树Ti,返回Ti大数据

下面咱们来看一个具体的例子,咱们的任务是根据天气状况计划是否要外出打球: 


 


首先来算一下根节点的熵: 

Entropy(PlayBall)=Entropy(5,9)=Engropy(0.36,0.64)=(0.36log20.36)(0.64log20.64)=0.94


而后再分别计算每一种划分的信息熵,比方说咱们选择Outlook这个特征来作划分,那么获得的信息熵为 


 


据此可计算采用Outlook这个特征来作划分时的信息增益为 

G(PlayBall,Outlook)=E(PlayBall)E(PlayBall,Outlook)=0.940.693=0.247


同理,选用其余划分时所获得之信息增益以下: 


 


取其中具备最大信息增益的特征来做为划分的标准,而后你会发现其中一个分支的熵为零(时间中阈值能够设定来惩罚过拟合),因此把它变成叶子,即得 


 


对于其余熵不为零(或者大于预先设定的阈值)的分支,那么则须要作进一步的划分 


 


根据上述的规则继续递归地执行下去。最终,咱们获得了以下一棵决策树。 


 

 


C4.5算法

C4.5是2006年国际数据挖掘大会票选出来的十大数据挖掘算法之首,可见它应该是很是powerful的!不只如此,事实上,C4.5的执行也至关的straightforward。

C4.5算法与ID3算法类似,C4.5算法是由ID3算法演进而来的。C4.5在生成的过程当中,用信息增益比来选择特征。下面咱们给出一个更加正式的C4.5算法的描述:

输入:训练数据集D,特征集A,阈值ϵ; 
输出:决策树T

  1. 若是D中全部实例属于同一类Ck,则置T为单结点树,并将Ck做为该结点的类,返回T
  2. 若是A=,则置T为单结点树,并将D中实例数最大的类Ck做为该结点的类,返回T
  3. 不然,计算A中各特征对D的信息增益比,选择信息增益比最大的特征Ag; 
    (1) 若是Ag的信息增益比小于阈值ϵ,则置T为单结点树,并将D中实例数最大的类Ck做为该结点的类,返回T; 
    (2) 不然,对Ag的每一可能值ai,依Ag=aiD分割为若干非空子集Di,将Di中实例数最大的类做为标记,构建子结点,由结点及其子结点构成树T,返回T
  4. 对结点i,以Di为训练集,以A{Ag}为特征集,递归地调用步骤(1)~(3),获得子树Ti,返回Ti

How to do it in practice?

易见,C4.5跟ID3的执行步骤很是相似,只是在划分时所采用的准则不一样。咱们这里再也不赘述。可是这里能够来看看在实际的数据分析中,该如何操做。咱们所使用的数据是以下所示的一个csv文件,文件内容同本文最初给出的Play Ball例子中的数据是彻底一致的。 


 


本博客以前介绍的实例中,已经分别演示过用R语言、Python,或者Matlab进行数据挖掘的方法,这里将演示另一种经常使用的数据挖掘工具Weka的使用。Weka是由新西兰怀卡托大学开发的一款基于Java的免费的数据挖掘工具,你能够从下面的连接中下载获得它:

 

使用Weka进行数据挖掘是很是容易的,你再也不须要像R语言或者MATLAB那样编写代码或者调用函数。基于GUI界面,在Weka中你只须要点点鼠标便可!首先咱们单击“Explorer”按钮来打开操做的主界面,以下图所示。 


 


而后咱们单击“Open File…”,并从相应的目录下选择你要用来进行模型训练的数据文件,以下图所示。 


 


Weka提供了很是易于操做的各类数据预处理功能,你能够本身尝试探索一下。注意到属性Day其实在构建决策树时是不须要的,我选中该属性,并将其移除,以下图所示。 


 


完成数据预处理后,咱们就能够开始进行模型训练了。由于咱们是要创建决策树,因此选择“Classify”选项卡,而后在“Classifier”中选择J48。你能够能会疑惑咱们不是要使用C4.5算法创建决策树吗?为何要选择J48呢?其实J48是一个开源的C4.5的Java实现版本(J48 is an open source Java implementation of the C4.5 algorithm),因此J48就是C4.5。 


 


而后你能够自定义的选择“Test options”中的一些测试选项,这里咱们不作过多说明。而后单击“Start”按钮,Weka就为咱们创建了一棵决策树,你能够从“Classifier output”栏目中看到模型训练的一些结果。可是对于决策树而言,你能够以为文字看起来还不够直观。没关系,Weka还为你提供了可视化的决策树建模呈现。为此,你须要右键单击刚刚训练好的模型,而后从右键菜单中选择“Visualize tree”,以下图所示。 


 


最后咱们获得了一棵与前面例子中相一致的决策树,以下图所示。 


 

 

在后续的决策树系列文章中,咱们将继续深刻探讨CART算法等相关话题。

(未完,待续…)


参考文献

【1】Wu, X., Kumar, V., Quinlan, J.R., Ghosh, J., Yang, Q., Motoda, H., McLachlan, G.J., Ng, A., Liu, B., Philip, S.Y. and Zhou, Z.H., 2008. Top 10 algorithms in data mining. Knowledge and information systems, 14(1), pp.1-37. (http://www.cs.uvm.edu/~icdm/algorithms/10Algorithms-08.pdf) 
【2】Pang-Ning Tan, Michael Steinbach, Vipin Kumar, 数据挖掘导论,人民邮电出版社 
【3】李航,统计学习方法,清华大学出版社 
【4】http://www.saedsayad.com/decision_tree.htm 
【5】https://www.cise.ufl.edu/~ddd/cap6635/Fall-97/Short-papers/2.htm

若是你对机器学习和数据挖掘感兴趣,你还能够参考个人高能资源帖: 
【6】机器学习与数据挖掘网上资源搜罗 
【7】机器学习与数据挖掘的学习路线图

相关文章
相关标签/搜索