决策树剪枝分前剪枝(预剪枝)和后剪枝两种形式.
决策树为什么(WHY)要剪枝?原因是避免决策树过拟合(Overfitting)样本。前面的算法生成的决策树非常详细并且庞大,每个属性都被详细地加以考虑,决策树的树叶节点所覆盖的训练样本都是“纯”的。因此用这个决策树来对训练样本进行分类的话,你会发现对于训练样本而言,这个树表现完好,误差率极低且能够正确得对训练样本集中的样本进行分类。训练样本中的错误数据也会被决策树学习,成为决策树的部分,但是对于测试数据的表现就没有想象的那么好,或者极差,这就是所谓的过拟合(Overfitting)问题。Quinlan教授试验,在数据集中,过拟合的决策树的错误率比经过简化的决策树的错误率要高。
PrePrune:预剪枝,及早的停止树增长。
通过提前停止树的构造进行剪枝.
后剪枝的剪枝过程是删除一些子树,然后用其叶子节点代替,这个叶子节点所标识的类别通过大多数原则(majority class criterion)确定。所谓大多数原则,是指剪枝过程中, 将一些子树删除而用叶节点代替,这个叶节点所标识的类别用这棵子树中大多数训练样本所属的类别来标识,所标识的类 称为majority class ,(majority class 在很多英文文献中也多次出现)。
后剪枝首先通过完全分裂构造完整的决策树,允许过拟合,然后采取一定的策略来进行剪枝,常用的后剪枝策略包括:
其实剪枝的准则是如何确定决策树的规模,可以参考的剪枝思路有以下几个:
我们先看下使用思路一来解决问题的集中后剪枝方法:
自底向顶剪枝
该剪枝方法考虑将书上的每个节点作为修剪的候选对象,决定是否修剪这个结点有如下步骤组成:
1:删除以此结点为根的子树
2:使其成为叶子结点
3:赋予该结点关联的训练数据的最常见分类
4:当修剪后的树对于验证集合的性能不会比原来的树差时,才真正删除该结点
因为训练集合的过拟合,使得验证集合数据能够对其进行修正,反复进行上面的操作,从底向上的处理结点,删除那些能够最大限度的提高验证集合的精度的结点,直到进一步修剪有害为止(有害是指修剪会减低验证集合的精度)
REP是最简单的后剪枝方法之一,不过在数据量比较少的情况下,REP方法趋于过拟合而较少使用。这是因为训练数据集合中的特性在剪枝过程中被忽略,所以在验证数据集合比训练数据集合小的多时,要注意这个问题。
尽管REP有这个缺点,不过REP仍然作为一种基准来评价其它剪枝算法的性能。它对于两阶段决策树学习方法的优点和缺点提供了了一个很好的学习思路。由于验证集合没有参与决策树的创建,所以用REP剪枝后的决策树对于测试样例的偏差要好很多,能够解决一定程度的过拟合问题。
具体看https://www.jianshu.com/p/794d08199e5e
出现标准差,是因为我们的子树的错误个数是一个随机变量,经过验证可以近似看成是二项分布,就可以根据二项分布的标准差公式算出标准差,就可以确定是否应该剪掉这个树枝了。子树中有N的实例,就是进行N次试验,每次实验的错误的概率为e,符合B(N,e)的二项分布,根据公式,均值为Ne,方差为Ne(1-e),标准差为方差开平方。
在上面这个例子中
剪枝前:Error=(7+3*0.5)/16
mean = N*e = 8.5
std = sqrt(error*(1-error)*N) = =2
剪枝后:将T4的所有子树剪掉之后,根据大多数原则重新计算错分率,假设仍有7个样本误分。
Error_mean = (7+0.5)=7.5
判断:
7.5 > 8.5-2
所以不剪枝
该算法被认为是当前决策树后剪枝算法中经度比较高的算法之一,但是仍存在有缺陷。首先,PEP算法是唯一使用Top-Down剪枝策略,这种策略会导致与预剪枝出现同样的问题,将该结点的某子节点不需要被剪枝时被剪掉;另外PEP方法会有剪枝失败的情况出现。
虽然PEP方法存在一些局限性,但是在实际应用中表现出了较高的精度,。两外PEP方法不需要分离训练集合和验证机和,对于数据量比较少的情况比较有利。再者其剪枝策略比其它方法相比效率更高,速度更快。因为在剪枝过程中,树中的每颗子树最多需要访问一次,在最坏的情况下,它的计算时间复杂度也只和非剪枝树的非叶子节点数目成线性关系。
CART用的就是CCP剪枝。
最后一句话感觉是ccp的重点,得到的最优决策树可能并不是原决策树的所有可能子树,有可能出现新的决策树。
http://blog.sina.com.cn/s/blog_4e4dec6c0101fdz6.html
http://leijun00.github.io/2014/10/decision-tree-2/
https://www.jianshu.com/p/794d08199e5e