CART树的剪枝

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wstcjf/article/details/77651435

CART树剪枝

预剪枝

  • 控制树的深度
  • 设定基尼系数(残差)的阈值,即若当前划分特征的基尼系数(残差)小于阈值时不再对当前的特征进行划分
  • 设定样本量的阈值,样本量小于阈值不再划分

后剪枝

总体思路:

  1. 由完全树T0开始,剪枝部分结点,得到T1,再次剪枝部分结点得到T2。。。知道仅剩树根的树Tk;
  2. 通过交叉验证,对以上k个树分别评价,选择损失函数最小的数Tα

具体过程:

  • 损失函数 

  原来的损失函数,子树的整体损失等于,对于每个叶子节点t,叶子结点t的样本个数再乘以叶子结点t的熵,的加和。   

   在此基础上,加上正则项,损失函数可转化为: 



lTleafl为子树的叶子结点的个数,Cα(T)是参数是α时的子树T的整体损失。参数α权衡训练数据的     拟合程度与模型的复杂度。设定了α就相当于给树剪枝了,保证了不会随着叶结点的增多,让模型复杂。

在真实计算过程中,当α = 0时,相当于不加正则项,也就是相当于未剪枝,也就是表示未剪枝的决策树损失最小;当α = 正无穷时,充分剪枝,造成单根结点的决策树损失最小


  • 剪枝系数

假定当前对以r为根的子树剪枝,可以计算剪枝前和剪枝后的损失函数,令两者相等,可以恰巧求出一个α,让剪枝前剪枝后损失相似,此时的α即为剪枝系数。

表示了剪枝后整体损失函数减少的程度。 



  • 剪枝过程
  1. 对整体树T0,计算内部各个结点的剪枝系数
  2. 查找剪枝系数最小的结点进行剪枝,得到一棵新的决策树
  3. 然后对新的决策树再次计算各个结点的剪枝系数,再剪枝,重复以上步骤,知道只剩一个结点。
  4. 通过以上步骤生成了T0,T1,…Tk决策树
  5. 对这些决策树依次进行交叉验证,选取最优子树Tα 

猜你喜欢

转载自blog.csdn.net/wstcjf/article/details/77651435