CART树剪枝
预剪枝
- 控制树的深度
- 设定基尼系数(残差)的阈值,即若当前划分特征的基尼系数(残差)小于阈值时不再对当前的特征进行划分
- 设定样本量的阈值,样本量小于阈值不再划分
后剪枝
总体思路:
- 由完全树T0开始,剪枝部分结点,得到T1,再次剪枝部分结点得到T2。。。知道仅剩树根的树Tk;
- 通过交叉验证,对以上k个树分别评价,选择损失函数最小的数Tα
具体过程:
- 损失函数
原来的损失函数,子树的整体损失等于,对于每个叶子节点t,叶子结点t的样本个数再乘以叶子结点t的熵,的加和。
在此基础上,加上正则项,损失函数可转化为:
lTleafl为子树的叶子结点的个数,Cα(T)是参数是α时的子树T的整体损失。参数α权衡训练数据的 拟合程度与模型的复杂度。设定了α就相当于给树剪枝了,保证了不会随着叶结点的增多,让模型复杂。
在真实计算过程中,当α = 0时,相当于不加正则项,也就是相当于未剪枝,也就是表示未剪枝的决策树损失最小;当α = 正无穷时,充分剪枝,造成单根结点的决策树损失最小。
- 剪枝系数
假定当前对以r为根的子树剪枝,可以计算剪枝前和剪枝后的损失函数,令两者相等,可以恰巧求出一个α,让剪枝前剪枝后损失相似,此时的α即为剪枝系数。
表示了剪枝后整体损失函数减少的程度。
- 剪枝过程
- 对整体树T0,计算内部各个结点的剪枝系数
- 查找剪枝系数最小的结点进行剪枝,得到一棵新的决策树
- 然后对新的决策树再次计算各个结点的剪枝系数,再剪枝,重复以上步骤,知道只剩一个结点。
- 通过以上步骤生成了T0,T1,…Tk决策树
- 对这些决策树依次进行交叉验证,选取最优子树Tα