前面学习了ID3,知道了有关“熵”以及“信息增益”的概念之后。
今天,来学习一下C4.5。都说C4.5是ID3的改进版,那么,ID3到底哪些地方做的不好?C4.5又是如何改进的呢?
在此,引用一下前人的总结:
ID3算法是决策树的一个经典的构造算法,在一段时期内曾是同类研究工作的比较对象,但通过近些年国内外学者的研究,ID3算法也暴露出一些问题,具体如下:
(1)信息增益的计算依赖于特征数目较多的特征,而属性取值最多的属性并不一定最优。
(2)ID3是非递增算法。
(3)ID3是单变量决策树(在分枝节点上只考虑单个属性),许多复杂概念的表达困难,属性相互关系强调不够,容易导致决策树中子树的重复或有些属性在决策树的某一路径上被检验多次。
(4)抗噪性差,训练例子中正例和反例的比例较难控制。
于是Quilan改进了ID3,提出了C4.5算法。C4.5算法现在已经成为最经典的决策树构造算法,排名数据挖掘十大经典算法之首,下一篇文章将重点讨论。
决策树的经典构造算法——C4.5(WEKA中称J48)
由于ID3算法在实际应用中存在一些问题,于是Quilan提出了C4.5算法,严格上说C4.5只能是ID3的一个改进算法。
C4.5算法继承了ID3算法的优点,并在以下几方面对ID3算法进行了改进:
1) 用信息增益率来选择属性,克服了用信息增益选择属性时偏向选择取值多的属性的不足;
2) 在树构造过程中进行剪枝;
3) 能够完成对连续属性的离散化处理;
4) 能够对不完整数据进行处理。
C4.5算法有如下优点:产生的分类规则易于理解,准确率较高。其缺点是:在构造树的过程中,需要对数据集进行多次的顺序扫描和排序,因而导致算法的低效。此外,C4.5只适合于能够驻留于内存的数据集,当训练集大得无法在内存容纳时程序无法运行。
另外,无论是ID3还是C4.5最好在小数据集上使用,决策树分类一般只试用于小数据。当属性取值很多时最好选择C4.5算法,ID3得出的效果会非常差。
总结的很不错。下面,我们就一起来对这些是是非非进行讨论。
1) 用信息增益率来选择属性,克服了用信息增益选择属性时偏向选择取值多的属性的不足;
信息增益PK信息增益率
这里说信息增益选择属性时,会偏向选择取值多的属性,so,why?
举个例子,userid(用户登录账号)。userid不可能存在相同的值,因此,有几个userid就意味着有几个元组,也就是说按照userid来划分的话,太纯了,每一个都不一样,所以他的。当然,我们也可以通过计算得出,基于userid对数据集D分类所需要的信息为:(假设有n个userid)
因此,通过对userid的划分得到的信息增益最大。显然,这种划分对分类毫无意义。
所以呢,就出现了另一种叫做“信息增益率”的度量,显然,它克服了信息增益的这种缺陷,让我们来看一下它是怎么做到的。
信息增益率利用“分裂信息”值将信息增益规范化。分裂信息类似于Info(D),定义如下:
“分裂信息”:代表训练数据集D划分成对应于属性A测试的v个输出的v个分区产生的信息。注意,对于每个输出,它相对于D中元组的总数考虑具有该输出的元组数。它不同于信息增益,信息增益是基于同样划分所获得的信息。
信息增益率的定义:
选择具有较大增益率的属性作为分裂属性。然而,需要注意的是,随着划分信息趋向于0,信息增益率将变得不稳定。为了避免这种情况,增加一个约束:选取的测试的信息增益必须较大,至少与考察的所有测试的平均增益一样大。
以上是书上的,我们照着再练习一下别的属性。
再来重温一下这段话:
选择具有较大增益率的属性作为分裂属性。然而,需要注意的是,随着划分信息趋向于0,信息增益率将变得不稳定。为了避免这种情况,增加一个约束:选取的测试的信息增益必须较大,至少与考察的所有测试的平均增益一样大。
增益率都求出来了,要选较大的(较大的有student&age)。还有一个约束我们得看看。
至少与考察的所有测试的平均增益一样大,因此,我们得先求出平均增益。
因此,这里就毙掉了两个属性:income&credit_rating。然后呢?然后选择一个较大的,但是,由于这个例子中所有的属性都是离散的,并不存在我们所说的类似userid的情况。所以说书上这个例子不是很能说明C4.5的优越性。
因此,接下来的内容引用:http://fangdonghao1029.blog.163.com/blog/static/34364307201281352032174/ 写的很不错。欢迎交流。
C4.5的算法步骤:
Step1.对数据源进行数据预处理,将连续型的属性变量进行离散化处理形成决策树的训练集(如果没有连续取
值的属性则忽略);
(1)根据原始数据,找到该连续型属性的最小取值a0。、最大取值a(n+1) ;
(2)在区间[a,b]内插入n个数值等分为n+1个小区间;
(3)分别以ai,i=l,2,⋯ ,n为分段点,将区间【a0, a(n+1) 】划分为两个子区间:
Step2.计算每个属性的信息增益和信息增益率;
(1)计算属性A的信息增益Gain(A)
信息增益Gain(A)的计算和ID3算法中的完全一致;
(2)计算属性A的信息增益率Gain—Ratio(A)
Gain—Ratio(A)= Gain(A)/I(A)
对于取值连续的属性而言,分别计算以ai (i=l,2,⋯,n)为分割点,对应分类的信息增益率,选择最大信息
增益率对应的n ,作为该属性分类的分割点。
选择信息增益率最大的属性,作为当前的属性节点,得到决策树的根节点。
Step3.根节点属性每一个可能的取值对应一个子集,对样本子集递归地执行以上Step2过程,直到划分的每个
子集中的观测数据在分类属性上取值都相同,生成决策树。
Step4.根据构造的决策树提取分类规则,对新的数据集进行分类。