自学数据挖掘十大算法之C4.5

C4.5算法是用于产生决策树的算法。该算法是对Ross Quinlan之前开发的ID3算法的一个扩展。C4.5算法产生的决策树可以被用作分类目的,因此该算法也可以用于统计分类。它也是决策树分类算法中,最常用的、最经典的算法。C4.5继承了ID3算法的优点并对ID3算法进行了改进和补充。C4.5算法采用信息增益率作为选择分支属性的标准,克服了ID3算法中信息增益选择属性时偏向选择取值多的属性的不足,并能够完成对连续属性离散化的处理,还能够对不完整数据进行处理。根据分割方法的不同,目前决策的算法可以分为两类:基于信息论(Information Theory)的方法和最小GINI指标(Lowest GINI index)方法。对应前者的算法有ID3、C4.5,后者的有CART、SLIQ和SPRINT。

该算法是一个构造决策树的过程,每个树内节点(非叶节点)代表一个属性上的测试,树的每一个分支代表一个测试输出,每个叶子节点代表一个类标号。

举例:我们根据一组天气情况属性判断去不去打高尔夫球,属性元组<outlook, temperature, humidity, windy>,接下来的问题是如何选择其中的一个属性作为第一个判断属性(树的第一层)。


DAY OUTLOOKTEMPERATUREHUMIDITYWINDYPLAY GOLF?
1sunny8585falseno
2sunny8090trueno
3overcast8378falseyes
4rainy7096falseyes
5rainy6880falseyes
6rainy6570trueno
7overcast6465trueyes
8sunny7295falseno
9sunny6970falseyes
10rainy7580falseyes
11sunny7570trueyes
12overcast7290trueyes
13overcast8175falseyes
14rainy7180trueno


属性选择度量:又称分裂规则,决定如何给定节点上的分裂。

算法过程:

1、首先计算整个数据集的信息熵,对于给定的训练集该值是确定的

  (1

Info(D) = -9/14 * log2(9/14) - 5/14 *log2(5/14) = 0.940

2、按照类标签对训练数据集D的属性集的一个属性A进行划分,得到各个属性的信息熵

 (2

Info(OUTLOOK) = 5/14 * [- 2/5 * log2(2/5) – 3/5 * log2(3/5)] + 4/14 * [ - 4/4 * log2(4/4) - 0/4 * log2(0/4)] + 5/14 * [ - 3/5 * log2(3/5) – 2/5 * log2(2/5)] = 0.694

Info(TEMPERATURE) = 4/14 * [- 2/4 * log2(2/4) – 2/4 * log2(2/4)] + 6/14 * [ - 4/6 * log2(4/6) - 2/6 * log2(2/6)] + 4/14 * [ - 3/4 * log2(3/4) – 1/4 * log2(1/4)] = 0.911

Info(HUMIDITY) = 7/14 * [- 3/7 * log2(3/7) – 4/7 * log2(4/7)] + 7/14 * [ - 6/7 * log2(6/7) - 1/7 * log2(1/7)] = 0.789

Info(WINDY) = 6/14 * [- 3/6 * log2(3/6) – 3/6 * log2(3/6)] + 8/14 * [ - 6/8 * log2(6/8) - 2/8 * log2(2/8)] = 0.892

 

3、计算属性A的信息增益

 (3

Gain(OUTLOOK) = Info(D) - Info(OUTLOOK) = 0.940 - 0.694 = 0.246

Gain(TEMPERATURE) = Info(D) - Info(TEMPERATURE) = 0.940 - 0.911 = 0.029

Gain(HUMIDITY) = Info(D) - Info(HUMIDITY) = 0.940 - 0.789 = 0.151

Gain(WINDY) = Info(D) - Info(WINDY) = 0.940 - 0.892 = 0.048

 

4、比较各个属性的信息增益大小,选择最大者作为决策树的第一个分裂节点。

        对于公式(2),如果该计算值越小,意味着我们接下来对A分出来的几个集合再进行分类所需要的信息就越少,也就是说越容易以此为基础分出合理的类别,当然,该算法的缺点也在这里,那就是它偏向于具有大量值的属性。什么意思呢?就是说在训练集中,某个属性所取的不同值的个数越多,那么越有可能拿它来作为分裂属性。例如一个训练集中有10个元组,对于某一个属相A,它分别取1到10这十个数,如果对A进行分裂将会分成10个类,那么对于每一个类Info(Dj)=0,从而式(2)为0,该属性划分所得到的信息增益(3)最大,但是很显然,这种划分没有意义。

以上是ID3的算法过程,C4.5在它的基础上做了改进,

(1)以信息增益率来作为属性度量。信息增益率:

 (4)

SI(OUTLOOK) = - 5/14 * log2(5/14) - 5/14* log2(5/14) - 4/14 * log2(4/14) = 1.577406282852345

SI(TEMPERATURE) = - 4/14 * log2(4/14) - 6/14 *log2(6/14) - 4/14 * log2(4/14) = 1.5566567074628228

SI(HUMIDITY) = - 7/14 * log2(7/14) -7/14 * log2(7/14) = 1.0

SI(WINDY) = - 6/14 * log2(6/14) - 8/14 *log2(8/14) = 0.9852281360342516

 (5

GR(OUTLOOK) = Info(OUTLOOK) / H(OUTLOOK) = 0.246/1.577406282852345 = 0.15595221261270145

GR(TEMPERATURE) = Info(TEMPERATURE) / H(TEMPERATURE) = 0.029 / 1.5566567074628228 = 0.018629669509642094

GR(HUMIDITY) = Info(HUMIDITY) / H(HUMIDITY) = 0.151/1.0 = 0.151

GR(WINDY) = Info(WINDY) / H(WINDY) = 0.048/0.9852281360342516 = 0.048719680492692784

 

(2)可以处理连续数值型属性

C4.5算法处理离散型描述属性的处理方法与ID3相同,按照该属性本身的取值个数进行计算;对于某个连续性描述属性A_con,假设在某个节点上的数据集的样本数量为N,C4.5算法将作以下处理:

  1. 将该节点上的所有数据样本按照连续型描述的属性的具体数值,由小到大进行排序,得到属性值的取值序列{A1_con,A2_con,……AN_con}。
  2. 在取值序列生成N-1个分割点。第i(0 < i <N)个分割点的取值设置为Vi=(Ai_con + A(i+1)_con)/2,它可以将该节点上的数据集划分为两个子集。
  3. 从N-1个分割点中选择最佳分割点。对于每一个分割点划分数据集的方式,C4.5算法计算它的信息增益比,并且从中选择信息增益比最大的分割点来划分数据集。

(3)采用了一种后剪枝方法

决策树为什么要剪枝?原因就是避免决策树“过拟合”样本。前面的算法生成的决策树非常的详细而庞大,每个属性都被详细地加以考虑,决策树的树叶节点所覆盖的训练样本都是“纯”的。因此用这个决策树来对训练样本进行分类的话,你会发现对于训练样本而言,这个树表现堪称完美,它可以100%完美正确得对训练样本集中的样本进行分类(因为决策树本身就是100%完美拟合训练样本的产物)。但是,这会带来一个问题,如果训练样本中包含了一些错误,按照前面的算法,这些错误也会100%一点不留得被决策树学习了,这就是“过拟合”。该方法是用训练样本本身来估计剪枝前后的误差,从而决定是否真正剪枝。方法中使用的公式如下:

   (6)

 

其中N是实例的数量,f=E/N为观察到的误差率(其中E为N个实例中分类错误的个数),q为真实的误差率,c为置信度(C4.5算法的一个熟人参数,默认值为0.25),z为对应于置信度c的标准差,其值可根据c的设定值通过查正态分布表得到。通过该公式即可计算出真实误差率q的一个置信区间上限,用此上限为该节点误差率e做一个悲观的估计:

 (7)

 

  

通过判断剪枝前后e的大小,从而决定是否需要剪枝。

(4)对于缺失值的处理

在某些情况下,可供使用的数据可能缺少某些属性的值。假如<x,c(x)>是样本集S中的一个训练实例,但是其属性A的值A(x)未知。处理缺少属性值的一种策略是赋给它节点n所对应的训练实例中该属性的最常见值;另外一种更复杂的策略是为A的每个可能值赋予一个概率。例如,给定一个布尔属性A,如果结点n包含6个已知A=1和4个A=0的实例,那么A(x)=1的概率是0.6,而A(x)=0的概率是0.4。于是,实例x的60%被分配到A=1的分支,40%被分配到另一个分支。这些片断样例(fractional examples)的目的是计算信息增益,另外,如果有第二个缺失值的属性必须被测试,这些样例可以在后继的树分支中被进一步细分。C4.5就是使用这种方法处理缺少的属性值。

 

参考:

http://baike.baidu.com/view/8775136.htm

http://en.wikipedia.org/wiki/Information_gain_ratio

http://www.cnblogs.com/zhangchaoyang/articles/2842490.html

http://shiyanjun.cn/archives/428.html

百度文库:C4.5算法生成决策树的研究


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值