C4.5是另一个分类决策树算法,基于ID3算法进行改进,相比于ID3算法有如下几个要点:
用信息增益率来选择属性。ID3选择属性用的是子树的信息增益,ID3使用的是熵(entropy, 熵是一种不纯度度量准则),也就是熵的变化值,而C4.5用的是信息增益率。在决策树构造过程中进行剪枝,因为某些具有很少元素的结点可能会使构造的决策树过适应(Overfitting),如果不考虑这些结点可能会更好。对非离散数据也能处理。能够对不完整数据进行处理。 基于ID3算法,C4.5算法主要有以下四个步骤:
Entropy(S):计算熵;
Gain(S,A):计算信息增益;
SplitInformation(S,A):计算分裂信息度量;
GainRatio(S,A):计算信息增益率。
根据计算得到的信息增益率进行选择属性集中的属性作为决策树结点,对该结点进行分裂。
C4.5算法的优点是:产生的分类规则易于理解,准确率较高。 C4.5算法的缺点是:在构造树的过程中,需要对数据集进行多次的顺序扫描和排序,因而导致算法的低效。
参考代码链接:http://www.cnblogs.com/wsine/p/5180315.html
以上数据属性集通常是离散的数据,那个对于连续的数据属性怎么计算信息增益率呢?
对于连续属性
连续变量的分支的阈值点为,这阈值如何确定呢?很简单,把需要处理的样本(对应根节点)或样本子集(对应子树)按照连续变量的大小从小到大进行排序,假设该属性对应的不同的属性值一共有N个,那么总共有N-1个可能的候选分割阈值点,每个候选的分割阈值点的值为上述排序后的属性值链表中两两前后连续元素的中点,那么我们的任务就是从这个N-1个候选分割阈值点中选出一个,使得前面提到的信息论标准最大。举个例子,对于Golf数据集,我们来处理温度属性,来选择合适的阈值。首先按照温度大小对对应样本进行排序如下
那么可以看到有13个可能的候选阈值点,比如middle[64,65], middle[65,68]….,middle[83,85]。那么最优的阈值该选多少呢?应该是middle[71,72],如上图中红线所示。为什么呢?如下计算:
通过上述计算方式,0.939是最大的,因此测试的增益是最小的。(测试的增益和测试后的熵是成反比的,这个从后面的公式可以很清楚的看到)。根据上面的描述,我们需要对每个候选分割阈值进行增益或熵的计算才能得到最优的阈值,我们需要算N-1次增益或熵(对应温度这个变量而言就是13次计算)。能否有所改进呢?少算几次,加快速度。答案是可以该进,如下图
该图中的绿线代表可能的最优分割阈值点,根据信息论知识,像middle[72,75](红线所示)这个分割点,72,75属于同一个类,这样的分割点是不可能有信息增益的。(把同一个类分成了不同的类,这样的阈值点显然不会有信息增益,因为这样的分类没能帮上忙,减少可能性)