ID3 and C4.5 Decision Tree

ID3决策树主要是用来进行分类,它的主要做法还是比较简单的,但是基于是递归的建树,所以写起代码来不是那么好写,它的做法大概是:

对于初始样本,选择一个最优的feature(怎么样算是最优,下面会解释),将一个点根据这个feature的不同取值,分成不同的分支,也就是说feature取几个值,就有几个分支,然后递归它的每一个分支,直到达到某些条件则停止递归。

这里要说明的是2点,

1 怎么选择最优的属性

这涉及到信息论的知识,我们可以把分类过程看做熵减少的过程,对于初始的样本有一个熵,然后按照不同的分支分类后,也会得到一个熵,我们要求的就是使得熵减少最多的这个feature。至于如何计算熵,有:


其中k表示类的个数。

而用分类前的熵减去按照分支分类后的熵总和,有: 

  


通俗的说,就是枚举某个属性A的所有值,根据这个值分成很多个子集,然后熵的和就是每一个子集熵乘以所占比重的和。

2 怎么判断停止递归

一种比较直观的办法,当前节点的样本类别都是相同的时候,可以不用递归,但是很多情况下,这样的做法会造成过拟合。还有就是当这个点的样本个数小于某个阀值,或者所有的属性都被分过了,其实停止递归也涉及到决策树的剪枝问题。

ID3决策树有两个局限性,第一就是使用的是熵增益,这个值有时候不能很好表示熵改变的情况,比如从3变到1,从1000变到998都是变化了2,但是明显是第一种情况变化的更多。第二个局限性是,ID3不能够没办法处理拥有连续值的feature,而C4.5能够较好的解决这两个问题。

C4.5和ID3建树的思想基本一致,只是用增益率代替了增益来衡量最优feature。

首先C4.5计算增益率的公式是:


其实个人对于这个增益率的理解还是和公式有一些的不同,个人觉得如果单从这个“率”来说,分母应该就是Gain(S,A)这个式子的减号后的那部分或者直接是Entropy(S),但是根据C4.5的定义不是按照每个类将这个点上的样本分开来计算,而是按照这个feature的不同取值将这个点上的样本分开来计算。

其次对于连续值的情况,假如所有的样本总共出现了n个值,C4.5所采用的办法就是,取这n个数间的n-1个间隔,对于每个间隔为分界点计算一次增益率(可以发现这样一定只是产生2个分支),求出最好的分界。


这幅图较好的解释了这个做法,将temperature排序后,我只需要划红线的界,因为界的两侧属于不同的类别,这在一定程度上能减小计算。

本文讲的太过粗浅,决策树比较重要的剪枝理论,有待研究学习下。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值