决策树算法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了决策树算法相关的知识,希望对你有一定的参考价值。

引、

    最近老师布置了课堂展示的作业,主题是决策树,老师还举了买西瓜的决策例子,感觉贴近生活也很有意思。在这之前没有了解过这个概念,通过几个礼拜的学习收获不少。


一、

    首先,什么是决策树?

    百度百科:决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用概率分析的一种图解法。由于这种决策分支画成图形很像一棵树的枝干,故称决策树。

        个人而言,决策树就是将人在做决策时的思维脉络以树的形式展示出来的产物,即决策的过程模型

        这是一棵去不去打高尔夫球的决策树:

                技术分享

    有Outlool、Humidity、Windy三个属性,每条路径代表不同的情况。Outlook下面的Sunny、Overcast和Rainy就是Outlook的三个分支。

    在这棵决策树里,我们首先考虑天气,如果是Overcast,就选择Yes。如果是Sunny,就在看看humidity然后根据其是否<=75决定Yes or No。是Rainy的话就考虑Windy。

    最后就得到了,打不打高尔夫球的决策结果。

 

    这时就要先说明一下,其实上面的决策树是通过一个数据集生成的,给出数据集:

    技术分享

   


二、

    那么问题来了,为什么我们要首先考虑天气情况而不是考虑湿度或者风力情况呢?

     

    接下来就引入一个概念,属性选择度量---意思是说如何选择哪个属性做为首先考虑。目前比较流行的三个指标是信息增益,信息增益比还有Gini指数。他们分别对应了三种算法。

    

     信息增益对应了ID3算法,是J.Ross.Quinlan提出的。

    (1)信息增益:

            计算对结果中分类的期望,也称为熵。对“Play Golf?”这一栏的计算。

            技术分享


            然后是按某个属性分类所需要的信息量:分别计算Outlook、Humidity和Windy三列。

            技术分享


            两个相减就是信息增益:

            技术分享

        选择信息增益最高的一个属性进行分裂。


    下面我们用SNS社区中不真实账号检测的例子(例子转自EricZhang‘s Tech Blog)说明如何使用ID3算法构造决策树。为了简单起见,我们假设训练集合包含10个元素:

技术分享


 设L、F、H和R表示日志密度、好友密度、是否使用真实头像和账号是否真实,下面计算各属性的信息增益。

    Info(D)=-0.7log0.7-0.3log0.3=0.879

    infoL(D)=0.3(-0/3log0/3-3/3log3/3)+0.4*(-1/4log1/4-3/4log3/4)+0.3*(-1/3log1/3-2/3log2/3)=0.603

    Gain(L)=info(D)-infoL(D)=0.276u因此日志密度的信息增益是0.276。

    用同样方法得到H和F的信息增益分别为0.033和0.553。


    在上图的基础上,再递归使用这个方法计算子节点的分裂属性,最终就可以得到整个决策树。上面为了简便,将特征属性离散化了,其实日志密度和好友密度都是连续的属性。



    技术分享



    但是ID3算法有缺陷,就是对算法倾向于选择分支情况多的属性作为分裂,但是这样的分类可能毫无意义。比如增加一个ID栏,值从1到10,那么计算结果信息增益是最高的,但是这样的分类毫无实际用处。   

 

    为此,Quinlan提出了升级版算法C4.5。对应的属性选择度量是信息增益比。

 

    (2)信息增益比:

      信息增益率使用“分裂信息”值将信息增益规范化。分类信息类似于Info(D):

        技术分享

        这个值表示通过将训练数据集D划分成对应于属性A测试的v个输出的v个划分产生的信息。


      信息增益率定义:

        技术分享


        选择信息增益比最大的属性作为分裂。


  上面去不去打高尔夫的决策树,就是通过C4.5算法来生成的。


    (3)

    由于作者比较懒,就不写上Gini指标的相关资料了。但是原理是一样的,只是计算的指标不同。



三、

    提到决策树,就不得不提到剪枝

简单介绍一下:

    当我们生成一棵决策树时,我们是通过给定的训练集来生成的,但是生成之后给了新的数据集之后,这棵决策树可能就会犯错。为什么呢,因为我们给的训练集不能完全包括所有情况,是片面的。而算法对每个属性都进行了计算,那么就会导致决策树考虑了一下没那么重要的属性,就会导致“过度拟合”。于是我们既要给决策树“剪枝”。

    顾名思义,剪枝就是对决策树进行修改,改变它的结构或高度。方法有两种:

   1、 预先剪枝。也就是预先规定一个标准,让决策树生成到这个标准的时候就不再继续生长了。但是这样也可能会导致遇到更好的属性却不能归到决策树中。标准有很多,比如复杂度,高度等等。

   2、后剪枝。在决策树生成之后,对其结点进行评估,若删掉这个结点决策树的准确率高了,那么就可以剪掉。


最后:

    由于学习的时间不长,也没有深入探究。有很多地方说的不够清楚和全面。若有不对或建议,欢迎指正和提出。



以上是关于决策树算法的主要内容,如果未能解决你的问题,请参考以下文章

鸢尾花决策树算法选题的目的和意义

决策树算法 CART和C4.5决策树有啥区别?各用于啥领域?

决策树算法总结

决策树算法原理

实验四 决策树算法及应用

5.10 决策树与ID3算法