决策树之 C4.5

C4.5 是对 ID3 的一个优化,它根据信息增益率来进行属性选择。
关于决策树,请参见:http://blog.csdn.net/bone_ace/article/details/46299681
关于 ID3,请参见:http://blog.csdn.net/Bone_ACE/article/details/46312215


关于 C4.5

C4.5 主要针对 ID3 的缺陷作了一些优化改进,相当于是一个“升级版”的 ID3:

  1. 能够处理连续型和离散型的数据。
  2. 能够处理包含缺失值的数据。
  3. 对生成的决策树进行了减枝。
  4. 使用信息增益率作为属性选择的标准。


信息增益率

信息增益率定义为:

GainRatio(A)=Gain(A)SplitE(A)

其中,分母 SplitE(A) 叫做分裂信息,公式定义为:
SplitE(A)=i=1k|Si||S|log2|Si||S|

信息增益 Gain(A) 的求解和 ID3 一样:
Gain(S,A)=Entropy(S)EntropyA(S)


信息熵:

Entropy(S)=i=1mpilog2pi

另外,属性 A 划分 S 的信息熵 EntropyA(S) 的求解增加了对连续型数据的处理。
如果属性 A 是离散型的数据,则:
EntropyA(S)=i=1k|Si||S|Entropy(Si)

如果属性 A 是连续型的数据,则:
EntropyA(S)=|SL||S|Entropy(SL)+|SR||S|Entropy(SR)

(将属性A的值按递增的顺序排序,对相邻的两个值取中间值(平均值),SLSR就是这个中间值左右两部分子集。文字解释比较拗口难懂,具体的使用见后面的例子。)


缺失值和减枝

缺失值处理:

缺失值处理的方法有两种:
一种,是抛弃含有缺失值的数据,这种适合于只含少量缺失值的情况。
另一种,是填充。C4.5 算法不是直接填充缺失值,而是用概率知识把信息增益率的求解作些变化:

  1. Gain(A)= 属性 A 在数据集中不空的比率×(Entropy(S)EntropyA(S))
  2. SplitE(A)=i=1k|Si||S|log2|Si||S||Sunknow||S|log2|Sunknow||S|

    (其中,Sunknow是含缺失值的数据组成的样本集。)

减枝处理:

  • 减枝的目的是消除过度拟合,提高决策树的品质。
  • 减枝的原则是去除预测准确度低的子树、降低决策树的复杂度、让决策树更加浅显易懂。
  • 减枝的方法有两个:一种,在构建决策树之前给出限定条件,限定树的生长;另一种,在决策树完全生长以后,对不良子树进行减枝。
  • C4.5 采用后一种方法:从底往上,如果用某个使用频率很高的子节点(或者叶子节点)替换该决策节点后,可以使得整棵树的预测误差率降低,则进行相应的减枝。
  • 然而怎么求预测误差率呢?(以后再补上。)


C4.5 步骤

  1. 对数据集进行预处理,对连续型属性求数据的最佳分裂点。
  2. 计算每个属性的信息增益率,选取信息增益率最大的属性作为决策节点的划分属性。
  3. 对决策节点属性的每个可能取值所对应的样本子集递归地执行步骤2,直到划分的每个子集中的观测数据都属于同一个类标号,最终生成决策树。
  4. 对完全生长的决策树进行剪枝,得到优化后的决策树。
  5. 从剪枝后的决策树中提取分类规则,对新的数据集进行分类。


C4.5的优缺点

优点:产生的分类规则易于理解,准确率较高。

缺点:

  • 在构造树的过程中,需要对数据集进行多次的顺序扫描和排序,因而导致算法的低效。
  • 精度不够高。商业上用 C5.0 而非 C4.5,就是因为它的预测精度还不能很好的满足用户的需求。
  • C4.5 只适合于能够驻留于内存的数据集,当训练集大得无法在内存容纳时,程序无法运行。
posted @ 2015-06-02 05:35  九茶  阅读(2147)  评论(0编辑  收藏  举报