ID3选择属性的依据是信息增益:
![Information Gain][equtation]
[equtation]: http://latex.codecogs.com/svg.latex?g_r(D,A)=H(D)-H(D|A)
ID3算法在选择根节点和内部节点中的分支属性时,采用信息增益作为评价标准。信息增益的缺点是倾向于选择取值较多的属性,在有些情况下这类属性可能不会提供太多有价值的信息。因此我们发展了C4.5乃至之后的C5.0算法。
C4.5算法
C4.5算法主要做出了以下方面的改进:
1.可以处理连续数值型属性
对于离散值,C4.5和ID3的处理方法相同,对于某个属性的值连续时,假设这这个节点上的数据集合样本为total,C4.5算法进行如下处理:
将样本数据该属性A上的具体数值按照升序排列,得到属性序列至{A1,A2,A3,...,Atotal};
在上一步生成的序列值中生成total-1个分割点。第i个分割点的取值为Ai和Ai+1的均值,每个分割点都将属性序列划分为两个子集。
计算每个分割点的信息增益(Information Gain),得到total-1个信息增益。
对分裂点的信息增益进行修正:减去log2(N-1)/|D|,其中N为可能的分裂点个数,D为数据集合大小。
选择修正后的信息增益值最大的分类点作为该属性的最佳分类点。
计算最佳分裂点的信息增益率(Gain Ratio)作为该属性的Gain Ratio。
选择Gain Ratio最大的属性作为分类属性。
![Gain Ratio][equtation2]
[equtation2]: http://latex.codecogs.com/svg.latex?g_R(D,A)=\frac{g_r(D,A)}{H_A(D)}=\frac{H(D)-H(D|A)}{H_A(D)}
2.用信息增益率(Information Gain Ratio)来选择属性
克服了用信息增益来选择属性时偏向选择值多的属性的不足。
![Gain Ratio][equtation2]
3.后剪枝策略
决策树很容易产生过拟合,剪枝能够避免树高度无限制增长,避免过度拟合数据。在上一节内容中,我们通过限制决策树的最大深度,这本质是一种预剪枝。
后剪枝相对来说更难一些,是通过一个剪枝系数来实现的,这里暂不论述。
**4.缺失值处理 **
对于某些采样数据,可能会缺少属性值。在这种情况下,处理缺少属性值的通常做法是赋予该属性的常见值,或者属性均值。另外一种比较好的方法是为该属性的每个可能值赋予一个概率,即将该属性以概率形式赋值。例如给定Boolean属性B,已知采样数据有12个B=0和88个B=1实例,那么在赋值过程中,B属性的缺失值被赋值为B(0)=0.12、B(1)=0.88;所以属性B的缺失值以12%概率被分到False的分支,以88%概率被分到True的分支。这种处理的目的是计算信息增益,使得这种属性值缺失的样本也能处理。
5.C4.5的缺点
- 算法低效,在构造树的过程中,需要对数据集进行多次的顺序扫描和排序,因而导致算法的低效
- 内存受限,适合于能够驻留于内存的数据集,当训练集大得无法在内存容纳时程序无法运行。
C4.5的伪代码
Function C4.5(R:包含连续属性的无类别属性集合,C:类别属性,S:训练集)
Begin
If S为空,返回一个值为Failure的单个节点;
If S是由相同类别属性值的记录组成,
返回一个带有该值的单个节点;
If R为空,则返回一个单节点,其值为在S的记录中找出的频率最高的类别属性值;
[注意未出现错误则意味着是不适合分类的记录];
For 所有的属性R(Ri) Do
If 属性Ri为连续属性,则
Begin
sort(Ri属性值)
将Ri的最小值赋给A1:
将Ri的最大值赋给Am;
For j From 1 To m-1 Do Aj=(A1+Aj+1)/2;
将Ri点的基于Aj(1<=j<=m-1划分的最大信息增益属性(Ri,S)赋给A;
End;
将R中属性之间具有最大信息增益的属性(D,S)赋给D;
将属性D的值赋给{dj/j=1,2...m};
将分别由对应于D的值为dj的记录组成的S的子集赋给{sj/j=1,2...m};
返回一棵树,其根标记为D;树枝标记为d1,d2...dm;
再分别构造以下树:
C4.5(R-{D},C,S1),C4.5(R-{D},C,S2)...C4.5(R-{D},C,Sm);
End C4.5
CART算法
CART算法的重要基础包含以下三个方面:
二分(Binary Split):在每次判断过程中,都是对观察变量进行二分。
CART算法采用一种二分递归分割的技术,算法总是将当前样本集分割为两个子样本集,使得生成的决策树的每个非叶结点都只有两个分枝。因此CART算法生成的决策树是结构简洁的二叉树。因此CART算法适用于样本特征的取值为是或非的场景,对于连续特征的处理则与C4.5算法相似。单变量分割(Split Based on One Variable):每次最优划分都是针对单个变量。
剪枝策略:CART算法的关键点,也是整个Tree-Based算法的关键步骤。
剪枝过程特别重要,所以在最优决策树生成过程中占有重要地位。有研究表明,剪枝过程的重要性要比树生成过程更为重要,对于不同的划分标准生成的最大树(Maximum Tree),在剪枝之后都能够保留最重要的属性划分,差别不大。反而是剪枝方法对于最优树的生成更为关键。
CART的基础是基尼系数(gini,并非经济学中的基尼系数):
![观察第一个等式,对比信息熵公式,我们把log(1/p_k)换成了(1-p_k)可以认为对log(1/p_k)在x_0=1处的泰勒展开,只取前两项后的结果。这种处理实际上减轻了运算压力。][equtation3]
[equtation3]: http://latex.codecogs.com/svg.latex?Gini(p)=\sum_{k=1}{K}p_k(1-p_k)=1-\sum_{k=1}{K}p_k2=1-\sum_{k=1}{K}(\frac{\left|C_k\right|}{D})^2
GINI指数主要是度量数据划分或训练数据集D的不纯度为主。GINI值越小,表明样本的纯净度越高(即该样本只属于同一类的概率越高)。
衡量出数据集某个特征所有取值的Gini指数后,就可以得到该特征的Gini Split info,也就是GiniGain。
不考虑剪枝情况下,分类决策树递归创建过程中就是每次选择GiniGain最小的节点做分叉点,直至子数据集都属于同一类或者所有特征用光。
CART的核心在于剪枝,我们日后再讨论这个问题。在最后一节,我们将会介绍随机森林的概念和简单的实践。