决策树后剪枝算法(一)代价复杂度剪枝CPP

本文详细介绍了决策树剪枝算法的四种常见方法:代价复杂度剪枝(CCP)、错误率降低剪枝(REP)、悲观错误剪枝(PEP)和最小错误剪枝(MEP),包括原理、计算复杂度、误差估计和剪枝策略,为理解决策树过拟合后的优化提供深入解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


 ​​ ​决策树后剪枝算法(一)代价复杂度剪枝CPP
 ​​ ​决策树后剪枝算法(二)错误率降低剪枝REP
 ​​ ​决策树后剪枝算法(三)悲观错误剪枝PEP
 ​​ ​决策树后剪枝算法(四)最小错误剪枝MEP

  剪枝,是一个“用准确性换取简单性”的思想。它允许决策树对训练集过拟合,再通过删除对泛化精度无贡献的子分支,从而修剪出一颗较小的树。以下列出几种较常见的后剪枝算法,及其机制对比:

CCPREPPEPMEP
剪枝方式自底向上自底向上自顶向下自底向上
计算复杂度 O ( n 2 ) O(n^2) O(n2) O ( n ) O(n) O(n) O ( n ) O(n) O(n) O ( n ) O(n) O(n)
误差估计标准误差剪枝集上误差连续性矫正概率估计
是否需要额外剪枝集

(1)代价复杂度剪枝(CCP)

  CCP算法为子树 T t T_t Tt定义了代价和复杂度,以及一个衡量代价与复杂度之间关系的参数 α \alpha α。大致流程为,从决策树 T 0 T_0 T0开始不断剪枝直到 T 0 T_0 T0的根节点,形成一个子树序列{ T 0 , T 1 , . . . , T n T_0, T_1,...,T_n T0,T1,...,Tn}; 然后经过交叉验证法在独立验证集上逐个测试评估, 从而选出最优子树。

(1.1)数学推导

评价标准:
R α ( T ) = R ( T ) + α ∣ f ( T ) ∣ R ( T ) = ∑ t ∈ f ( T ) r ( t ) . p ( t ) = ∑ t ∈ f ( T ) R ( t ) R_\alpha(T) = R(T) + \alpha|f(T)|\\ R(T)=\sum_{t\in f(T)}r(t).p(t)=\sum_{t\in f(T)}R(t) Rα(T)=R(T)+αf(T)R(T)=tf(T)r(t).p(t)=tf(T)R(t)
解读:

  • R α ( T ) R_{\alpha}(T) Rα(T)即为一棵树好坏的评价标准。
  • R ( T ) R(T) R(T)是决策树训练集误差(代价), ∣ f ( T ) ∣ |f(T)| f(T)表示决策树的叶子节点数量(复杂度)。
  • α \alpha α是正则化参数,用以权衡训练数据的拟合程度与模型复杂度。
  • ∑ t ∈ f ( T ) R ( t ) \sum_{t\in f(T)}R(t) tf(T)R(t)表示每个叶子节点所产生的错误分类的误差和。
  • p ( t ) p(t) p(t)为叶子节点权重( = n ( t ) n =\frac{n(t)}{n} =nn(t)), r ( t ) r(t) r(t)为叶子结点误分类率( = e r r o r ( t ) n ( t ) =\frac{error(t)}{n(t)} =n(t)error(t))。
img

  进一步推导,对于一个固定的 α \alpha α值, 一定存在一颗使得 C α ( T ) C_{\alpha}(T) Cα(T)最小的子树 T α T_{\alpha} Tα, 即在固定 α \alpha α下的最优剪枝策略。现在考虑 α \alpha α变化,考虑极端情况: 当 α = 0 \alpha=0 α=0时, 有 R α ( T ) = R ( T ) R_\alpha(T) = R(T) Rα(T)=R(T), 即不考虑复杂度, 易知完整树即为最优;当 α → ∞ \alpha\rightarrow\infty α,复杂度权重无穷大,易知单节点树为最优。及 α \alpha α 0 → ∞ 0\rightarrow\infty 0 α \alpha α对应的最优树 T α T_{\alpha} Tα从繁变简。

  再结合 B r e i m a n Breiman Breiman等人的证明: 将 α \alpha α从小增大, 0 = α 0 < α 1 < . . . < α n < ∞ 0=\alpha_0<\alpha_1<...<\alpha_n<\infty 0=α0<α1<...<αn<, 产生一系列的区间 [ a i , a i + 1 ) [a_i, a_{i+1}) [ai,ai+1) i = 0 , 1 , 2 , . . . , n i=0,1,2,...,n i=0,1,2,...,n; 剪枝得到的子树序列对应着区间 α ∈ [ a i , a i + 1 ) ,   i = 0 , 1 , 2... n \alpha\in{[a_i, a_{i+1})},~i=0,1,2...n α[ai,ai+1), i=0,1,2...n的最优子树序列{ T 0 , T 1 , . . . , T n T_0, T_1, ...,T_n T0,T1,...,Tn},序列中的子树是嵌套的, 即 T 0 T_0 T0爷爷/ T 1 T_1 T1父亲/ T 2 T_2 T2儿子/ T 3 T_3 T3孙子…以此类推。

  那么如何选取每一阶段的 α \alpha α, 这里引入剪枝整体损失函数减少程度指标 g ( t ) = R ( t ) − R ( T t ) ∣ T t ∣ − 1 g(t)=\frac{R(t)-R(T_t)}{|T_t|-1} g(t)=Tt1R(t)R(Tt),其具体含义如下:
当 R α ( T t ) = R α ( t ) 时 , 即剪枝后误差增长率为 0 R α ( T t ) = R α ( T t ) + ∣ f ( T t ) ∣ R α ( t ) = R α ( t ) + 1 解得 α ’ = R ( t ) − R ( T t ) ∣ T t ∣ − 1 , 即剪枝临界点 ( 必定剪枝 ) 当R_\alpha(T_t)=R_\alpha(t)时,即剪枝后误差增长率为0\\ R_\alpha(T_t)=R_\alpha(T_t)+|f(T_t)|\\ R_\alpha(t)=R_\alpha(t)+1\\ 解得\alpha’=\frac{R(t)-R(T_t)}{|T_t|-1},即剪枝临界点(必定剪枝) Rα(Tt)=Rα(t),即剪枝后误差增长率为0Rα(Tt)=Rα(Tt)+f(Tt)Rα(t)=Rα(t)+1解得α=Tt1R(t)R(Tt),即剪枝临界点(必定剪枝)
  且可证得 g ( t ) g(t) g(t)与误差增长率成正比:
KaTeX parse error: Expected 'EOF', got '&' at position 75: …T-T_t)|-|f(T)|)&̲\\ =[R(else)+R(…
  根据以上推导结论, 对于特定 α \alpha α区间,要求最优 T α T_\alpha Tα需寻求误差增长率最小, 即 g ( t ) g(t) g(t)最小。故我们所需要做的, 就是每轮迭代中遍历所有非叶子节点, T i − 1 T_{i-1} Ti1剪枝 g ( t ) g(t) g(t)最小的节点生成下一颗最优子树 T i T_i Ti,从而生成子树序列。

  最后基于独立验证集, 对子树序列 T 0 , T 1 , . . . , T n T_0, T_1, ...,T_n T0,T1,...,Tn中的平方误差或基尼系数逐个计算, 再作评估选择即可。

(1.2)算法流程

  • 输入:CART算法生成的决策树 T 0 T_0 T0
  • 输出:最优决策树 T α T_\alpha Tα
  • (1)设 k = 0 , T = T 0 k=0, T=T_0 k=0,T=T0
  • (2)设 α = + ∞ \alpha=+\infin α=+
  • (3)自下而上地对各内部结点 t t t计算 R ( T t ) R(T_t) R(Tt) ∣ f ( T t ) ∣ |f(T_t)| f(Tt)以及:

g ( t ) = R ( t ) − R ( T t ) ∣ T t ∣ − 1 α = m i n ( α , g ( t ) ) g(t)=\frac{R(t)-R(T_t)}{|T_t|-1}\\ \alpha=min(\alpha, g(t)) g(t)=Tt1R(t)R(Tt)α=min(α,g(t))

  • (4)对 g ( t ) = α g(t)=\alpha g(t)=α的内部结点 t t t进行剪枝, 并对叶结点构成的树,回到步骤(2);否则令 T k = T n T_k=T_n Tk=Tn
  • (7)采用交叉验证法在子树序列 T 0 , T 1 , . . . , T n T_0, T_1, ...,T_n T0,T1,...,Tn中选取最优子树 T α T_\alpha Tα(分类:基尼系数 \ 回归:平均误差)。

(1.3)例题计算

 #### (一)原始决策树

img

 #### (二)第一次迭代

INPUT: α = 0 ,   T 1 = t 1 , t 2 , t 3 \alpha=0,~ T^1={t_1,t_2,t_3} α=0, T1=t1,t2,t3

在这里插入图片描述

OUTPUT: α 2 = min ⁡ g 1 ( t ) = 1 8 ,   t = t 2 或 t 3 \alpha^2=\min{g_1(t)}=\frac{1}{8},~t=t_2或t_3 α2=ming1(t)=81, t=t2t3

在这里插入图片描述

 #### (三)第二次迭代

INPUT: a l p h a 2 = 1 8 , T 2 = t 1 , t 2 alpha^2=\frac{1}{8},T^2={t_1, t_2} alpha2=81,T2=t1,t2

在这里插入图片描述

OUTPUT: α 3 = min ⁡ g 2 ( t ) = 1 8 , t = t 2 \alpha^3=\min{g_2(t)=\frac{1}{8}}, t=t_2 α3=ming2(t)=81,t=t2

在这里插入图片描述

 #### (四)第三次迭代
INPUT: T 3 = t 1 T^3={t1} T3=t1

OUTPUT: α 4 = g 3 ( t 1 ) = 8 16 − 4 16 2 − 1 = 1 4 \alpha^4=g_3(t_1)=\frac{\frac{8}{16}-\frac{4}{16}}{2-1}=\frac{1}{4} α4=g3(t1)=21168164=41

 即子树序列 T 0 , T 1 , . . . , T n T_0, T_1, ...,T_n T0,T1,...,Tn及其参数 α \alpha α的计算, 接下来进行交叉验证即可选择最优子树即可。

(1.4)代码实现

 手写实现 + sklearn实现

链接:https://pan.baidu.com/s/1gskUIAHfv9lZ6Mtq7r7I1Q 
提取码:wo7m

 代码参考:http://www.hzcourse.com/web/refbook/detail/9970/226

——————————————————————————————————————————-—————————————————

参考资料:

[1] 现代决策树模型及其编程实践 黄智濒 编著

[2] 统计学习方法(第二版) 李航 著

[3] https://blog.csdn.net/WANGWUSHAN/article/details/108556371

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值