什么是剪枝?spa
剪枝是指将一颗子树的子节点所有删掉,根节点做为叶子节点,如下图为例:3d
为甚么要剪枝?blog
决策树是充分考虑了全部的数据点而生成的复杂树,有可能出现过拟合的状况,决策树越复杂,过拟合的程度会越高。方法
考虑极端的状况,若是咱们令全部的叶子节点都只含有一个数据点,那么咱们可以保证全部的训练数据都能准确分类,可是颇有可能获得高的预测偏差,缘由是将训练数据中全部的噪声数据都”准确划分”了,强化了噪声数据的做用。im
剪枝修剪分裂先后分类偏差相差不大的子树,可以下降决策树的复杂度,下降过拟合出现的几率。d3
怎样剪枝?数据
两种方案:先剪枝和后剪枝margin
先剪枝说白了就是提早结束决策树的增加,跟上述决策树中止生长的方法同样。db
后剪枝是指在决策树生长完成以后再进行剪枝的过程。这里介绍三种后剪枝方案:img
(1)REP—错误率下降剪枝
顾名思义,该剪枝方法是根据错误率进行剪枝,若是一棵子树修剪先后错误率没有降低,就能够认为该子树是能够修剪的。
REP剪枝须要用新的数据集,缘由是若是用旧的数据集,不可能出现分裂后的错误率比分裂前错误率要高的状况。因为使用新的数据集没有参与决策树的构建,可以下降训练数据的影响,下降过拟合的程度,提升预测的准确率。
(2)PEP—悲观剪枝
悲观剪枝认为若是决策树的精度在剪枝先后没有影响的话,则进行剪枝。怎样才算是没有影响?若是剪枝后的偏差小于剪枝前经度的上限,则说明剪枝后的效果与剪枝前的效果一致,此时要进行剪枝。
进行剪枝必须知足的条件:
其中:
表示剪枝前子树的偏差;
表示剪枝后节点的偏差;
二者的计算公式以下:
令子树偏差的经度知足二项分布,根据二项分布的性质, ,
,其中
,N为子树的数据量;一样,叶子节点的偏差
。
上述公式中,0.5表示修正因子。因为子节点是父节点进行分裂的结果,从理论上讲,子节点的分类效果总比父节点好,分类的偏差更小,若是单纯经过比较子节点和父节点的偏差进行剪枝就彻底没有意义了,所以对节点的偏差计算方法进行修正。修正的方法是给每个节点都加上偏差修正因子0.5,在计算偏差的时候,子节点因为加上了偏差修正因子,就没法保证总偏差低于父节点。
算例:
因为 ,因此应该进行剪枝。
(3)CCP—代价复杂度剪枝
代价复杂度选择节点表面偏差率增益值最小的非叶子节点,删除该非叶子节点的左右子节点,如有多个非叶子节点的表面偏差率增益值相同小,则选择非叶子节点中子节点数最多的非叶子节点进行剪枝。
可描述以下:
令决策树的非叶子节点为。
a) 计算全部非叶子节点的表面偏差率增益值
b)选择表面偏差率增益值最小的非叶子节点(若多个非叶子节点具备相同小的表面偏差率增益值,选择节点数最多的非叶子节点)。
c)对选中的非叶子节点进行剪枝
表面偏差率增益值的计算公式:
其中:
表示叶子节点的偏差代价,
,
为节点的错误率,
为节点数据量的占比;
表示子树的偏差代价,
,
为子节点i的错误率,
表示节点i的数据节点占比;
表示子树节点个数。
算例:
下图是决策树A的其中一颗子树,决策树的总数据量为40。
该子树的表面偏差率增益值能够计算以下:
求出该子树的表面错误覆盖率为 1/40,只要求出其余子树的表面偏差率增益值就能够对决策树进行剪枝.