剪枝是决策树的结构化正则, 在“拟合训练集”与“模型复杂度”之间显式权衡。代价复杂度 (cost-complexity):
Rα(T)=R(T)+α∣T∣, 其中
R(T) 是经验风险 — 分类: 叶子误分类率加权和
R(T)=∑t∈leaves(T)∣D∣∣Dt∣⋅err(t)(
err(t) 为叶子
t 内多数类错误比例), 回归: 叶子 MSE 加权和;
∣T∣ 是叶子数,
α≥0 是每片叶子的复杂度惩罚。预剪枝: 分裂前先评估, 若本次分裂不能让验证集误差下降 (或样本量低于阈值/深度超限) 就停止生长; 后剪枝 (CART 代价复杂度剪枝): 先生成完整树, 再自底向上考察内部节点
t — 把子树
Tt 换成单叶子
t 时, 代价从
R(Tt)+α∣Tt∣ 变为
R(t)+α, 两边相等解出临界
α=∣Tt∣−1R(t)−R(Tt): 当
α 大于该临界值时剪枝后
Rα 更小, 应该剪。CART 从
α=0 起逐步挑临界
α 最小的节点逐个剪掉 (最弱连接 weakest-link 剪枝), 得到嵌套子树序列
T0⊃T1⊃⋯⊃Tk, 最后用验证集 (或交叉验证) 选
R(Ti) 最小的树, 即选定
α∗。C4.5 用悲观剪枝: 用加连续性校正的经验误差
Rpe(t)=∣Dt∣err(t)+2∣Tt∣ 判断是否值得剪。