机器学习sklearn(学习笔记4)——决策树2剪枝

什么是剪枝?

剪枝是指将一颗子树的子节点全部删掉,根节点作为叶子节点,以下图为例:
在这里插入图片描述
首先剪枝(pruning)的目的是为了避免决策树模型的过拟合。因为决策树算法在学习的过程中为了尽可能的正确的分类训练样本,不停地对结点进行划分,因此这会导致整棵树的分支过多,也就导致了过拟合。决策树的剪枝策略最基本的有两种:预剪枝(pre-pruning)和后剪枝(post-pruning):

预剪枝

预剪枝就是在构造决策树的过程中,先对每个结点在划分前进行估计,若果当前结点的划分不能带来决策树模型泛华性能的提升,则不对当前结点进行划分并且将当前结点标记为叶结点。

后剪枝

后剪枝就是先把整颗决策树构造完毕,然后自底向上的对非叶结点进行考察,若将该结点对应的子树换为叶结点能够带来泛华性能的提升,则把该子树替换为叶结点。

为甚么要剪枝?

决策树是充分考虑了所有的数据点而生成的复杂树,有可能出现过拟合的情况,决策树越复杂,过拟合的程度会越高。
考虑极端的情况,如果我们令所有的叶子节点都只含有一个数据点,那么我们能够保证所有的训练数据都能准确分类,但是很有可能得到高的预测误差,原因是将训练数据中所有的噪声数据都”准确划分”了,强化了噪声数据的作用。
剪枝修剪分裂前后分类误差相差不大的子树,能够降低决策树的复杂度,降低过拟合出现的概率。

怎样剪枝?

两种方案:先剪枝和后剪枝
先剪枝说白了就是提前结束决策树的增长,跟上述决策树停止生长的方法一样。
后剪枝是指在决策树生长完成之后再进行剪枝的过程。这里介绍三种后剪枝方案:

(1)REP—错误率降低剪枝

顾名思义,该剪枝方法是根据错误率进行剪枝,如果一棵子树修剪前后错误率没有下降,就可以认为该子树是可以修剪的。
REP剪枝需要用新的数据集,原因是如果用旧的数据集,不可能出现分裂后的错误率比分裂前错误率要高的情况。由于使用新的数据集没有参与决策树的构建,能够降低训练数据的影响,降低过拟合的程度,提高预测的准确率。

(2)PEP—悲观剪枝

悲观剪枝认为如果决策树的精度在剪枝前后没有影响的话,则进行剪枝。怎样才算是没有影响?如果剪枝后的误差小于剪枝前经度的上限,则说明剪枝后的效果与剪枝前的效果一致,此时要进行剪枝。
进行剪枝必须满足的条件:
在这里插入图片描述
其中:
在这里插入图片描述表示剪枝前子树的误差;
在这里插入图片描述表示剪枝后节点的误差;
两者的计算公式如下:
在这里插入图片描述
令子树误差的经度满足二项分布,根据二项分布的性质,在这里插入图片描述在这里插入图片描述,其中 在这里插入图片描述N为子树的数据量;同样,叶子节点的误差在这里插入图片描述
上述公式中,0.5表示修正因子。由于子节点是父节点进行分裂的结果,从理论上讲,子节点的分类效果总比父节点好,分类的误差更小,如果单纯通过比较子节点和父节点的误差进行剪枝就完全没有意义了,因此对节点的误差计算方法进行修正。修正的方法是给每一个节点都加上误差修正因子0.5,在计算误差的时候,子节点由于加上了误差修正因子,就无法保证总误差低于父节点。
算例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
由于 在这里插入图片描述,所以应该进行剪枝。
(3)CCP—代价复杂度剪枝
代价复杂度选择节点表面误差率增益值最小的非叶子节点,删除该非叶子节点的左右子节点,若有多个非叶子节点的表面误差率增益值相同小,则选择非叶子节点中子节点数最多的非叶子节点进行剪枝。
可描述如下:
令决策树的非叶子节点为{T1,T2,T3,T4,……Tn}。
a) 计算所有非叶子节点的表面误差率增益值
b)选择表面误差率增益值最小的非叶子节点(若多个非叶子节点具有相同小的表面误差率增益值,选择节点数最多的非叶子节点)。
c)对选中的非叶子节点进行剪枝
表面误差率增益值的计算公式:
在这里插入图片描述
其中:

R(t)表示叶子节点的误差代价,R(t)=r(t) *p(t), r(t)为节点的错误率, p(t)为节点数据量的占比;
R(T)表示子树的误差代价,在这里插入图片描述, ri(t)为子节点i的错误率, pi(t)表示节点i的数据节点占比;
N(T)表示树节点个数

算例:

下图是决策树A的其中一颗子树,决策树的总数据量为40。
在这里插入图片描述
该子树的表面误差率增益值可以计算如下:
在这里插入图片描述
求出该子树的表面错误覆盖率为 1/40,只要求出其他子树的表面误差率增益值就可以对决策树进行剪枝.
参考资料【https://www.cnblogs.com/yonghao/p/5064996.html】
参考资料【https://blog.csdn.net/u012328159/article/details/79285214】

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值