【十大数据挖掘算法】C4.5决策树

2006年的ICDM评出了十大数据挖掘算法:C4.5, k-Means, SVM, Apriori, EM, PageRank, AdaBoost, kNN, Naive Bayes, and CART。

本系列是对这十大算法的个人理解。本文准备先用最通俗的语言大致解释下C4.5是什么,把基本思想弄明白,然后再涉及一些数学等理论细节。

如有错误希望大家指出,一起交流~

1.通俗理解决策树

C4.5是一种决策树算法,是ID3的扩展,光说思想的话 ,ID3和C4.5是差不多的。

C4.5和ID3都是模拟了人的一个决策过程。 我们要对一件事情做决策(分类),需要考虑这件事情的各个方面(特征)。

转载一个简单的决策树实例如下:一个女孩的母亲要给这个女孩介绍男朋友,于是有了下面的对话:

     女儿:多大年纪了?

     母亲:26。

     女儿:长的帅不帅?

     母亲:挺帅的。

     女儿:收入高不?

     母亲:不算很高,中等情况。

     女儿:是公务员不?

     母亲:是,在税务局上班呢。

     女儿:那好,我去见见。

以上就是一个典型的决策过程,画成决策树如下:

其中见不见介绍的人是决策结果(分类结果),而年龄,长相,收入,是否是公务员则是各种特征。

C4.5和ID3算法过程和上图很类似。当我们拥有很多训练数据,每一条数据包括多个特征和一个决策结果的时候。我们就根据训练数据构造一个决策树。其中一个重要的过程就是选择特征。比如上图,我选择年龄作为第一个节点,然后是长相,收入,公务员。这个选择的标准说通俗点就是我最看重哪个,我就先挑哪个。年龄这一条只要大于30,我就能直接作出决策,而其他因素都不用考虑了。

C4.5和ID3就是根据大量的包括多种特征的训练数据,通过特征选择,构建如上图的决策树。 当决策树构建好了之后,再来一条数据,则可以在这颗树上找到自己的路径,并达到叶子节点(分类结果)

2.决策树的理论

C4.5算法的流程如下:


其中第6行是最主要的部分,就是如何从D中大量的特征中选择一个作为一个节点。
这里涉及到信息论的知识。

2.1.ID3的信息选择标准-信息增益

假设D中最后能作出n个决策。则D的信息熵是Info(D)=-(p1*log(p1) + p2*log(p2) + .. + pn*log(pn))
例如一共有10个男人,女儿决定去见其中3个,7个不见,则Info(D)=-0.3*log(0.3)-0.7log(0.7)=0.88129089923069261822481922424276
我们假设挑选属性A,A有m个取值。那么属性A把D分成了m部分,表示为d1,d2,...dm
当属性A确定时,D的信息熵为Info(D|A)=|d1|/|D|*Info(d1)+|d2|/|D|*Info(d2)+...+|dm|/|D|*Info(dm)
例如这里A表示收入,有三个取值:高,中等,低。
10个男人中2个高收入,5个中等收入,3个低收入。|d1|=2,|d2|=5,|d3|=3
d1的2个男人全部去见了(p1=1,p2=0),d2的5个男人3个去见了,2个没去(p1=0.6,p2=0.4),d3的3个男人都没去见(p1=0,p2=1)
Info(D|A)=2/10*(-1*log1-0*log0)+5/10*(-0.6*log0.6-0.4*log0.4)+3/10*(-0*log0-1*log1)=0.5(这个数字我瞎写的。。)
那么我选择A作为节点的信息增益gain(D,A)=Info(D)-Info(D|A)=0.3

我们需要把所有的属性A都求出增益gain(D,A),取能使gain(D,A)最大的A作为我们的特征。

理解一下就是Info(D)表示D本身的不确定性,Info(D|A)表示A已知时D的不确定性,我们需要的属性A应该能最大消除D的不确定性,所以Info(D|A)尽量小,则gain(D,A)取最大。

2.2.C4.5的信息选择标准-信息增益率

ID3就直接用gain(D,A)作为选择A的标准,但是这会有一个问题,就是它倾向于选择拥有很多取值的A,所以这里需要做一个归一化。
C4.5在ID3的基础上做了一次归一化,他用gainRatio(D,A)作为判断标准。
gainRatio(D,A)=gain(D,A) / SplitInfo(D,A)
其中SplitInfo(D,A)表示把D按照A的取值划分带来的信息量。假设A有m个取值,a1,a2,...am。D中A取a1的为d1,A取a2的为d2,.....
则p1=|d1|/|D|,p2=|d2|/|D|,...,pm=|dm|/|D|
SplitInfo(D,A)=-(p1*log(p1) + p2*log(p2) + .. + pm*log(pm))
说白了就是SplitInfo的意思是把D按照A的取值做划分带来的信息熵,而不考虑D最后的决策。

3.其他

其实C4.5还有其他好处,比如对连续变量的处理和剪枝。
个人看法是:
1.对于连续变量,最好能预处理成离散的。C4.5提供了机制能直接处理连续变量,但是它的方法是对该连续变量穷举所有的分法。找到一个最佳的分割点。说白了就是自动把连续变量处理成一个二值的离散变量,这样的坏处有亮点,一是大大增加计算量;二是只能分成二值的。当然,也可以分成多值的离散变量,但是这样带来的计算量的增加是恐怖的。
2.剪枝。本人对这个真心不熟,希望有熟悉的朋友解释下C4.5的剪枝部分。

4.思考

1.如何解决在判断时需要同时考虑多种因素的情况?比如:我判断一个人是否有钱,特征有2个:现金和存款。一个人现金为0,存款100W,我判断有钱。另外一个人现金100W,存款为0,同样判断有钱,说白了,我的真实判断标准就是现金+存款>100W就是有钱。这种情况如何用C4.5分类?

2.有没有online版的C4.5?

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值