基于ID3、C4.5与CART的决策树三生成与剪枝原理详解

1 篇文章 0 订阅
1 篇文章 0 订阅

基于ID3、C4.5与CART的决策树三生成与剪枝原理详解

1、决策树学习

决策树学习本质从训练数据集中归纳出一组分类规则。可能有多个,可能没有。我们需要的是一个与训练数据矛盾较小的决策树,同时具有很好的泛化能力。另一方面看,决策树表示一个条件概率分布,所以深浅不同的决策树对应着不同复杂度的概率模型。

决策树学习的损失函数:决策树学习用损失函数表示这一目标,损失函数通常是正则化的极大似然函数。

决策树学习的策略:是以损失函数为目标函数的最小化。

决策树学习的算法通常是一个递归地选择最优特征,并根据该特征对训练数据进行分割,使得对各个子数据集有一个最好的分类的过程。

决策树的过拟合:以上方法生成的决策树可能对训练数据有很好的分类能力,但对未知的测试数据却未必有很好的分类能力,即可能发生过拟合现象。

决策树剪枝:需要对已生成的树自下而上进行剪枝,将树变得更简单,从而使它具有更好的泛化能力。具体地,就是去掉过于细分的叶结点,使其回退到父结点,甚至更高的结点,然后将父结点或更高的结点改为新的叶结点。

可以看出,决策树学习算法包含特征选择,决策树的生成与决策树的剪枝过程。决策树学习常用的算法有ID3C4.5CART,下面结合这些算法分别叙述决策树学习的特征选择,决策树的生成与决策树的剪枝过程。

 

2、特征选择

特征选择问题:特征选择在于选取对训练数据具有分类能力的特征。通常特征选择的准则是信息增益或信息增益比。

在信息论与概率统计中,熵是表示随机变量不确定性的度量。设有随机变量(X,Y),其联合概率分布为:

                

条件熵H(Y|X)表示在已知随机变量X的条件下随机变量Y的不确定性。随机变量X给定的条件下随机变量Y的条件熵(conditional entropy) H(Y|X),定义为X给定条件下Y的条件概率分布的熵对X的数学期望:

    

这里,

当熵和条件熵中的概率由数据估计(特别是极大似然估计)得到时,所对应的熵与条件熵分别称为经验熵( empirical entropy)和经验条件熵(empirical conditional entropy )

信息增益(information gain)表示得知特征X的信息而使得类Y的信息的不确定性减少的程度。

信息增益:特征A对训练数据集D的信息增益g(D,A),定义为集合D的经验熵H(D)与特征A给定条件下D的经验条件熵H(D|A)之差,即

                                                                           

决策树学习中的信息增益等价于训练数据集中类与特征的互信息。

根据信息增益准则的特征选择方法是:对训练数据集(或子集)D,计算其每个特征的信息增益,并比较它们的大小,选择信息增益最大的特征。

                                                                 

|D|表示其样本容量,即样本个数。设有K个类Ckk=1,2,...,K|Ck|为属于类Ck的样本个数。根据特征A的取值将D划分为n个子集D1,D2,...,Dn,|Di|Di的样本个数。记子集Di中属于类Ck的样本的集合为Dik

信息增益值的大小是相对于训练数据集而言的,并没有绝对意义。在分类问题困难时,也就是说在训练数据集的经验熵大的时候,信息增益值会偏大,反之,信息增益值会偏小。

以信息增益作为划分训练数据集的特征,存在偏向于选择取值较多的特征的问题,使用信息增益比(information gain ratio)可以对这一问题进行校正。

信息增益比:特征A对训练数据集D的信息增益比gR(D,A)定义为其信息增益g(D,A)与训练数据集D关于特征A的值的熵HA(D)之比

                                                                              

3、决策树的生成

ID3算法: ID3算法的核心是在决策树各个结点上应用信息增益准则选择特征。   

                                                  

                                                 

ID3算法只有树的生成,所以该算法生成的树容易产生过拟合。

C4.5算法:与ID3算法相似,不同是用信息增益比来选择特征

                                                        

CART算法:分类与回归树(classification and regression tree, C ART)模型同样由特征选择、树的生成及剪枝组成,既可以用于分类也可以用于回归。  CART算法由以下两步组成

(1)决策树生成:基于训练数据集生成决策树,生成的决策树要尽量大;

(2)决策树剪枝:用验证数据集对己生成的树进行剪枝并选择最优子树,这时用损失函数最小作为剪枝的标准。

CART生成:对回归树用平方误差最小化准则,对分类树用基尼指数(Gini index)最小化准则,进行特征选择。

回归树的生成:     

                                                         

分类树的生成:

分类树用基尼指数选择最优特征,同时决定该特征的最优二值切分点。

基尼指数:分类问题中,假设有K个类,样本点属于第k类的概率为pk,则概率分布的基尼指数定义为 

                                                                       

对于给定的样本集合D,其基尼指数为

                                                                           

如果样本集合D根据特征A是否取某一可能值a被分割成D1D2两部分,

                                                                       

则在特征A的条件下,集合D的基尼指数定义为

                                                                     

基尼指数Gini(D)表示集合D的不确定性,基尼指数Gini(D,A)表示经A=a分割后集合D的不确定性。基尼指数值越大,样本集合的不确定性也就越大,这一点与熵相似。

                                                           

 

4、决策树的剪枝

决策树是一种分类器,通过ID3C4.5CART等算法可以通过训练数据构建一个决策树。但是,算法生成的决策树非常详细并且庞大,每个属性都被详细地加以考虑,决策树的树叶节点所覆盖的训练样本都是“纯”的。因此用这个决策树来对训练样本进行分类的话,你会发现对于训练样本而言,这个树表现完好,误差率极低且能够正确得对训练样本集中的样本进行分类。训练样本中的错误数据也会被决策树学习,成为决策树的部分,但是对于测试数据的表现就没有想象的那么好,或者极差,这就是所谓的过拟合(Overfitting)问题。

决策树的剪枝:在决策树学习中将已生成的树进行简化的过程称为剪枝(pruning)。具体地,剪枝从已生成的树上裁掉一些子树或叶结点,并将其根结点或父结点作为新的叶结点,从而简化分类树模型.

决策树的剪枝有两种思路:预剪枝(Pre-Pruning)和后剪枝(Post-Pruning

预剪枝(Pre-Pruning

在构造决策树的同时进行剪枝。所有决策树的构建方法,都是在无法进一步降低熵的情况下才会停止创建分支的过程,为了避免过拟合,可以设定一个阈值,熵减小的数量小于这个阈值,即使还可以继续降低熵,也停止继续创建分支。但是这种方法实际中的效果并不好。

后剪枝(Post-Pruning

决策树构造完成后进行剪枝。剪枝的过程是对拥有同样父节点的一组节点进行检查,判断如果将其合并,熵的增加量是否小于某一阈值。如果确实小,则这一组节点可以合并一个节点,其中包含了所有可能的结果。后剪枝是目前最普遍的做法。

后剪枝的剪枝过程是删除一些子树,然后用其叶子节点代替,这个叶子节点所标识的类别通过大多数原则(majority class criterion)确定。所谓大多数原则,是指剪枝过程中, 将一些子树删除而用叶节点代替,这个叶节点所标识的类别用这棵子树中大多数训练样本所属的类别来标识,所标识的类 称为majority class ,(majority class 在很多英文文献中也多次出现)。

决策树的剪枝往往通过极小化决策树整体的损失函数(loss fimction)或代价函数( cost function)来实现。

设树T的叶结点个数为|T|, t是树T的叶结点,该叶结点有Nt个样本点,其中k类的样本点有Ntk个,k=1,2,...,KHt(T)为叶结点t上的经验嫡,a>=0为参数,则决策树学习的损失函数可以定义为:

                                                                             

其中经验熵为

                                                                              

右端第一项记作

                                                                              

这时有

                                                                               

C(T)表示模型对训练数据的预测误差,即模型与训练数据的拟合程度,|T|表示平莫型复杂度,参数a>=0控制两者之间的影响。剪枝,就是当a确定时,选择损失函数最小的模型,即损失函数最小的子树。损失函数正好表示了对模型的复杂度和训练数据的拟合两者的平衡。

决策树生成只考虑了通过提高信息增益(或信息增益比)对训练数据进行更好的拟合,学习局部的模型;

决策树剪枝通过优化损失函数还考虑了减小模型复杂度,学习整体的模型。

利用损失函数最小原则进行剪枝就是用正则化的极大似然估计进行模型选择。

                                                                 

                                                                                 

 

CART剪枝:

CART剪枝算法由两步组成首先从生成算法产生的决策树T0底端开始不断剪枝,直到T0的根结点,形成一个子树序列代{T0,T1,...,Tn};然后通过交叉验证法在独立的验证数据集上对子树序列进行测试,从中选择最优子树。

(1) 剪枝。形成一个子树序列

在剪枝过程中,计算子树的损失函数:

                                                                            

T为任意子树,C(T)为预测误差,可以是平方误差也可以是基尼指数,|T|为子树T的叶子节点个数,注意是叶子节点,α>= 0为参数,Cα(T)为参数是α时的子树T的整体损失,|T|衡量树的复杂度(即大小),α权衡拟合程度与树的复杂度。

对固定的α,一定存在使损失函数Cα(T)最小的子树,将其表示为Tα在损失函数Cα(T)最小的意义下是最优的。容易验证这样的最优子树是唯一的。当α大的时候,最优子树Tα偏小;当α小的时候,最优子树Tα偏大。

Breiman等人证明:可以用递归的方法对树进行剪枝,将a从小增大,a0<a1<...<an<+无穷,产生一系列的区间[aiai+1)i =0,1,...,n;剪枝得到的子树序列对应着区间[aiai+1)i =0,1,...,n的最优子树序列{T0, T1, ... , Tn},序列中的子树是嵌套的。

我们每次剪枝剪的都是某个内部节点的子节点,也就是将某个内部节点的所有子节点回退到这个内部节点里,并将这个内部节点作为叶子节点。因此在计算整体的损失函数时,这个内部节点以外的值都没变,只有这个内部节点的局部损失函数改变了,因此我们本需要计算全局的损失函数,但现在只需要计算内部节点剪枝前和剪枝后的损失函数。

从整体树T0开始剪枝,T0的任意内部结点t

剪枝前,以t为根节点的子树Tt的损失函数是

                                             

剪枝后,以t为单节点的树的损失函数

                                                                               

易得,一定存在一个α 使得这个值为 

                                                                                

对于当前这个节点,剪枝前与剪枝后有相同的损失函数值,但剪枝后树的复杂程度降低,因此剪枝好。如果α小于这个值时,剪了会使整体损失函数增大,不剪为好,如果α大于这个值时,一定有,剪掉这个节点后都比不剪损失函数更小,即剪掉这个节点后都比不剪要更优。所以每个最优子树对应的是一个区间,在这个区间内都是最优的。

T0中每一内部结点t,计算

                                                                               

表示剪枝后整体损失函数减少的程度,在T0中剪去g(t)最小的Tt,将得到的子树作为T1,同时将最小的g(t)设为a1T1为区间[a1a2)的最优子树。如此剪枝下去,直至得到根结点。在这一过程中,不断地增加a的值,产生新的区间。

解释一下:为什么要选择最小的g(t)呢?以图中两个点为例,结点1和结点2g(t)2大于g(t)1, 假设在所有结点中g(t)1最小,g(t)2最大

                                                                     

两种选择方法:当选择最大值g(t)2,即结点2进行剪枝,但此时结点1的不修剪的误差大于修剪之后的误差,即如果不修剪的话,误差变大,依次类推,对其它所有的结点的g(t)都是如此,从而造成整体的累计误差更大,即此时的子树不是该alpha值下最优

反之,如果选择最小值g(t)1,即结点1进行剪枝,则其余结点不剪的误差要小于剪后的误差,不修剪为好,且整体的误差最小。此时获得的子树是该alpha值下的最优子树!

这样alpha从小到大依次递归剪枝下来就能保证每次剪枝获得的都是该alpha值下的最优子树。

交叉验证:在剪枝得到的子树序列T0, T1, ... , Tn中通过交叉验证选取最优子树Ta

                                    

 

 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值