1. 基本概念
1.1 剪枝的定义与目的
剪枝(pruning)是决策树学习算法对付"过拟合"的主要手段。
过拟合的原因:
在决策树学习中,为了尽可能正确分类训练样本,结点划分过程将不断重复,有时会导致决策树分支过多。这时可能因把训练样本自身的一些特点当作所有数据都具有的一般性质而导致过拟合。
解决方案:
因此,可通过主动去掉一些分支来降低过拟合的风险。
1.2 剪枝的基本策略
决策树剪枝的基本策略有两种:
- 预剪枝(prepruning)
- 后剪枝(post-pruning)
性能评估方法:
为了评估剪枝的效果,需要采用性能评估方法。通常采用留出法 (hold-out method),将数据集划分为训练集 和验证集,用验证集来评估模型的泛化性能。
2. 预剪枝
2.1 预剪枝的定义
预剪枝是指在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点。
2.2 预剪枝的过程
基本流程:
- 划分前评估:在划分前,计算当前结点作为叶结点时的验证集精度
- 划分后评估:计算划分后各分支结点的验证集精度
- 决策 :比较划分前后的验证集精度
- 如果划分后精度提升,则进行划分
- 如果划分后精度不提升或下降,则禁止划分,将当前结点标记为叶结点
叶结点标记规则:
如果不进行划分,当前结点将被标记为叶结点,其类别标记为当前结点中样本数最多的类(使用多数投票原则)。
2.3 预剪枝的优缺点
优点:
- 降低过拟合风险:预剪枝能够防止许多分支的"展开",有效降低过拟合风险
- 减少训练和测试时间:由于树的结构更简单,训练和测试时间显著降低
缺点:
- 欠拟合风险:预剪枝的"贪心"本质可能带来问题。有些分支的当前划分虽不能提升泛化性能,甚至可能导致暂时下降,但在其基础上进行的后续划分却可能导致性能显著提升。预剪枝基于"贪心"本质禁止这些分支展开,给预剪枝决策树带来了欠拟合的风险。
3. 后剪枝
3.1 后剪枝的定义
后剪枝则是先从训练集生成一棵完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化性能提升,则将该子树替换为叶结点。
3.2 后剪枝的过程
基本流程:
- 生成完整决策树:首先从训练集生成一棵完整的决策树(未剪枝)
- 自底向上考察:从最底层的非叶结点开始,自底向上地对每个非叶结点进行考察
- 评估剪枝效果:对于每个非叶结点,计算将其子树替换为叶结点后的验证集精度
- 决策:如果剪枝后精度提升,则进行剪枝;否则保留该子树
叶结点标记规则:
如果进行剪枝,将子树替换为叶结点,该叶结点的类别标记为子树中训练样本数最多的类。
3.3 后剪枝的优缺点
优点:
- 保留更多分支:后剪枝决策树通常比预剪枝决策树保留了更多的分支
- 欠拟合风险小:一般情形下,后剪枝决策树的欠拟合风险很小
- 泛化性能好:泛化性能往往优于预剪枝决策树
缺点:
- 训练时间开销大:后剪枝过程是在生成完全决策树之后进行的,并且要自底向上地对树中的所有非叶结点进行逐一考察,因此其训练时间开销比未剪枝决策树和预剪枝决策树都要大得多
4. 预剪枝与后剪枝的比较
4.1 对比总结
| 特性 | 预剪枝 | 后剪枝 |
|---|---|---|
| 剪枝时机 | 决策树生成过程中 | 完整决策树生成后 |
| 剪枝方向 | 自顶向下 | 自底向上 |
| 树的结构 | 通常更简单(决策树桩) | 通常保留更多分支 |
| 过拟合风险 | 较低 | 较低 |
| 欠拟合风险 | 较高(贪心本质) | 较低 |
| 泛化性能 | 一般 | 通常更好 |
| 训练时间 | 较短 | 较长 |
| 测试时间 | 较短 | 中等 |
4.2 选择建议
- 预剪枝:适用于训练数据量大、对训练时间要求高的场景,但需要注意欠拟合风险
- 后剪枝:适用于对泛化性能要求高、训练时间相对充裕的场景,通常能获得更好的性能
5. 总结
决策树剪枝是决策树学习算法对付过拟合的主要手段。
两种基本策略:
- 预剪枝:在决策树生成过程中,对每个结点在划分前进行估计,若划分不能带来泛化性能提升,则停止划分
- 后剪枝:先生成完整决策树,然后自底向上地对非叶结点进行考察,若替换为叶结点能提升泛化性能,则进行剪枝
核心要点:
- 剪枝的目标是降低过拟合风险,提高模型的泛化性能
- 预剪枝和后剪枝各有优缺点,需要根据具体场景选择
- 预剪枝训练时间短但可能欠拟合,后剪枝泛化性能好但训练时间长
- 通常采用留出法划分训练集和验证集来评估剪枝效果
实际应用:
在实际应用中,后剪枝通常能获得更好的泛化性能,但需要更多的计算资源。预剪枝则更适合对训练时间有严格要求的场景。