cart决策树剪枝的个人理解

本文介绍了CART决策树的剪枝过程,采用代价复杂度剪枝算法,通过调整参数α平衡预测误差与树复杂度。文章详细阐述了如何生成子树序列并进行交叉验证,以找到最优子树作为决策树。作者提出了自己的理解,强调剪枝过程中不仅选择最优超参数,而且是从小到大的α值进行剪枝,利用动态规划策略确定最佳剪枝方案。
摘要由CSDN通过智能技术生成

先说好前面部分我引用自以下这篇文章的,我不想写了

https://blog.csdn.net/wjc1182511338/article/details/76793164?locationNum=6&fps=1

CART之剪枝详解

我们这里用的是代价复杂度剪枝算法。

首先我们将一颗充分生长的树称为T0 ,我们希望减少树的大小来防止过拟化,但又担心去掉一些节点后预测的误差会增大,那么如何达到这两个变量之间的平衡则是问题的关键,因此我们用一个变量α来平衡,因此损失函数定义为如下: 


T为任意子树,C(T)为预测误差,可以是平方误差也可以是基尼指数,|T|为子树T的叶子节点个数,注意是叶子节点,α 是参数,C(T)衡量训练数据的拟合程度,|T|衡量树的复杂度(即大小),α 权衡拟合程度与树的复杂度。

 

 

那么我们如何找到这个合适的α来使拟合程度与复杂度之间达到最好的平衡呢,最好的办法就是,我们将α从0取到正无穷,对于每一个固定的α,我们都可以找到使得Cα(T)最小的最优子树T(α) 。当α 很小的时候,T0是这样的最优子树,当α很大的时候,单独一个根节点是这样的最优的子树。

尽管α 取值无限多,但是T0 的子树是有限个,因此我们可以生成这样一个子树序列 


Tn是最后剩下的那个根节点。(这里的子树生成是根据前一个子树Ti,剪掉某一个内部节点,生成Ti+1)然后对这样的子树序列分别用测试集进行交叉验证,找到最优的那个子树作为我们的决策树。

 

这也是代价复杂度剪枝的核心思想。

基于上面的论述,剪枝可分为两部分,第一部分生成子树序列,第二部分交叉验证。

1. 生成子树序列

我们每次剪枝剪的都是某个内部节点的子节点,也就是将某个内部节点的所有子节点回退到这个内部节点里,并将这个内部节点作为叶子节点。因此在计算整体的损失函数时,这个内部节点以外的值都没变,只有这个内部节点的局部损失函数改变了,因此我们本需要计算全局的损失函数,但现在只需要计算内部节点剪枝前和剪枝后的损失函数。

对任意内部节点t,

剪枝前的状态:有|Tt| 个叶子节点,预测误差是C(Tt)

剪枝后的状态:只有本身一个叶子节点,预测误差是C(t)

 

以下是我自己的理解部分

第一:这里的剪枝和前面讲的决策树剪枝不同的地方就是,之前就在一个固定的超参数alpha上剪枝,这里不是 ,他不但剪枝,还挑选最优的超参数。

第二:虽然alpha 是无限多的 ,但是树的可能性是固定的,因此更具上面breiman的证明我门知道,在一个固定的区间【a,b】内,无论alpha取什么,最优的树都是那一棵,所以他就从下到上依次计算剪掉每个点之后对应的alpha(为什么从下到上,,,当然是因为动态规划啦)。

第三:为什么从最小的alpha开始,因为我门知道alpha越大,树就越简单,意味着剪掉的越多,而alpha越小,树越复杂剪掉的越少,所以从小的alpha开始意味着是一种从下到上的剪枝啦,这样又可以动态规划啦。

所以最后把所有可能剪掉 的枝的树都集合起来,然后用验证集交叉验证选出最优的就OK了

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值