决策树算法

引、

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


一、

    首先,什么是决策树?

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

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

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

                wKiom1dSgEyyIGW7AABy7Qfe_20996.png

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

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

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

 

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

    wKioL1dShHLQIW_OAAFaOUm8vxA597.png

   


二、

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

     

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

    

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

    (1)信息增益:

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

            wKioL1dShPWy1YqhAAAhzqU9hVc040.png


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

            wKiom1dSg_KRVizeAAAjbCxXew8609.png


            两个相减就是信息增益:

            wKiom1dSg_OCGTZiAAAdOZEOHFk708.png

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


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

wKioL1dSiAzBv1RFAABpQdHY4tE646.png


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


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



    wKiom1dShwrDCFQ9AAE0pVYwtuc148.png



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

 

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

 

    (2)信息增益比:

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

        wKioL1dShs-BA3i5AAAxbGDBfO0391.png

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


      信息增益率定义:

        wKioL1dShtDAPfHZAAAq_cjaV5g625.png


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


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


    (3)

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



三、

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

简单介绍一下:

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

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

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

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


最后:

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



本文出自 “Sunny” 博客,请务必保留此出处http://qmkkd.blog.51cto.com/9511687/1786100

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值