CART剪枝过程

本文详细介绍了CART(Classification And Regression Tree)决策树的剪枝过程,包括从树底端开始的逐步剪枝,以及通过交叉验证选择最优子树的方法。在剪枝中,使用损失函数Cα(T)来平衡模型复杂度与训练误差,通过调整参数α找到最佳剪枝点。剪枝生成的子树序列与α序列相对应,最终通过验证集确定最佳子树,即剪枝后的CART模型。
摘要由CSDN通过智能技术生成

Classification And Regression Tree,CART,分类与回归树,一种二叉决策树。作为一种决策树算法,CART与其他决策树一样,由特征选择、树的生成和剪枝组成。本文介绍CART算法生成决策树 T 0 T_0 T0 后如何对其进行剪枝(将子树变成叶子节点)。
在这里插入图片描述

剪枝过程分为两步:

  1. 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}
  2. 通过交叉验证选择最优的子树作为剪枝后的CART

1. 剪枝,形成子树序列

在剪枝过程中,使用以下损失函数作为是否剪枝的依据:
C α ( T ) = C ( T ) + α ∣ T ∣ C_{\alpha}(T) = C(T) + \alpha |T| Cα(T)=C(T)+αT
其中 T T T可以是任意子树, C ( T ) C(T) C(T) T T T在训练数据上的误差(根据回归或者分类,可以是均方误差或者基尼指数), ∣ T ∣ |T| T T T T的叶子节点数, α \alpha α是参数, C a ( T ) C_a(T) Ca(T)是参数是 α \alpha α T T T的整体损失。 α \alpha α可以权衡训练数据的拟合程度与模型复杂度( ∣ T ∣ |T| T)。因此, α \alpha α越大,则更倾向于选择更小的树,随着 α \alpha α的增大,使 C α ( T ) C_{\alpha}(T) Cα(T)最小的树逐渐从 T 0 T_0 T0变成最后的单节点的树

对于固定的 α \alpha α,可以验证存在唯一的子树使 C α ( T ) C_\alpha(T) Cα(T)最小。

具体过程如下:
T 0 T_0 T0开始,自下而上地考虑每个内部节点 t t t,考虑两种情况:

  • 1)以 t t t为根节点的子树 T t T_t Tt,其损失为: C α ( T t ) = C ( T t ) + α ∣ T t ∣ C_\alpha(T_t) = C(T_t) + \alpha|T_t| Cα(Tt)=C(Tt)+αTt
  • 2)对 t t t进行剪枝,即将 T t T_t Tt作为叶子节点,其损失为: C α ( t ) = C ( t ) + α C_\alpha(t) = C(t) + \alpha Cα(t)=C(t)+α;

我们来比较 C α ( T t ) , C α ( t ) C_\alpha(T_t),C_\alpha(t) Cα(Tt)Cα(t),看看要不要对 t t t进行剪枝:

  • α \alpha α较小时,可以容忍模型有较高的复杂度,这个时候主要保证在训练数据上误差很小即可,所以 C α ( T t ) < C α ( t ) C_\alpha(T_t) < C_\alpha(t) Cα(Tt)<Cα(t),即这个时候不需要剪枝
  • α \alpha α逐渐增大到某一值时,这个时候需要考虑在训练数据上误差很小且模型有较低的复杂度,所以 C α ( T t ) = C α ( t ) C_\alpha(T_t) = C_\alpha(t) Cα(Tt)=Cα(t),即这个时候剪不剪枝都可以
  • α \alpha α继续增大, C α ( T t ) > C α ( t ) C_\alpha(T_t) > C_\alpha(t) Cα(Tt)>Cα(t),这个时候剪枝带来的收益大于作为一棵子树 T t T_t Tt所带来的收益,所以要剪枝

从以上过程我们可以看出,对于树中的每个内部节点 t t t,都有一个特定的 α \alpha α阈值 g ( t ) g(t) g(t),来决定是否需要对其进行剪枝,且该阈值等于 g ( t ) = C ( t ) − C ( T t ) ∣ T t ∣ − 1 g(t) = \frac{C(t) - C(T_t)}{|T_t| - 1} g(t)=Tt1C(t)C(Tt)(由上述关于 C α ( T t ) , C α ( t ) C_\alpha(T_t),C_\alpha(t) Cα(Tt)Cα(t)大小的比较可以得出)。

因此,在生成 T 1 T_1 T1时,我们可以计算 T 0 T_0 T0的每个内部节点的 g ( t ) g(t) g(t),选择其中最小的 g ( t ) g(t) g(t)最为 α 1 \alpha_1 α1,对该结点进行剪枝后就可以子树序列中的 T 1 T_1 T1了。接着在 T 1 T_1 T1的基础上持续剪枝,就可以得到最终的子树序列。

在生成子树序列的过程中,我们也可以得到一个 α \alpha α序列 0 = α < α 1 < α 2 < . . . < α n < + ∞ 0=\alpha < \alpha_1 < \alpha_2 < ... < \alpha_n < +\infty 0=α<α1<α2<...<αn<+,这个序列对应着一个区间 [ α i , α i + 1 ) , i = 0 , 1 , . . . , n [\alpha_i, \alpha_{i+1}),\quad i=0, 1, ..., n [αi,αi+1),i=0,1,...,n,这与我们得到的子树序列是相对应的, T i T_i Ti对应着 [ α i , α i + 1 ) [\alpha_i, \alpha_{i+1}) [αi,αi+1)

其实,在生成子树序列的过程中,我们计算 C α ( T t ) , C α ( t ) C_\alpha(T_t),C_\alpha(t) Cα(Tt)Cα(t)是为了判断:当模型复杂度有多重要时我们需要对 t t t进行剪枝,也就是剪枝后带来的收益大于作为子树带来的模型效果收益。

2. 交叉验证

使用验证数据集,测试子树序列中每棵子树的损失,选择最小的作为剪枝后的决策树,这个时候也对应了一个 α k \alpha_k αk

Reference

  1. 统计学习方法,李航,第二版
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值