学习笔记十四:决策树剪枝

1. 基本概念

1.1 剪枝的定义与目的

剪枝(pruning)是决策树学习算法对付"过拟合"的主要手段。

过拟合的原因

在决策树学习中,为了尽可能正确分类训练样本,结点划分过程将不断重复,有时会导致决策树分支过多。这时可能因把训练样本自身的一些特点当作所有数据都具有的一般性质而导致过拟合。

解决方案

因此,可通过主动去掉一些分支来降低过拟合的风险。

1.2 剪枝的基本策略

决策树剪枝的基本策略有两种:

  • 预剪枝(prepruning)
  • 后剪枝(post-pruning)

性能评估方法

为了评估剪枝的效果,需要采用性能评估方法。通常采用留出法 (hold-out method),将数据集划分为训练集验证集,用验证集来评估模型的泛化性能。

2. 预剪枝

2.1 预剪枝的定义

预剪枝是指在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点。

2.2 预剪枝的过程

基本流程

  1. 划分前评估:在划分前,计算当前结点作为叶结点时的验证集精度
  2. 划分后评估:计算划分后各分支结点的验证集精度
  3. 决策 :比较划分前后的验证集精度
    • 如果划分后精度提升,则进行划分
    • 如果划分后精度不提升或下降,则禁止划分,将当前结点标记为叶结点

叶结点标记规则

如果不进行划分,当前结点将被标记为叶结点,其类别标记为当前结点中样本数最多的类(使用多数投票原则)。

2.3 预剪枝的优缺点

优点

  • 降低过拟合风险:预剪枝能够防止许多分支的"展开",有效降低过拟合风险
  • 减少训练和测试时间:由于树的结构更简单,训练和测试时间显著降低

缺点

  • 欠拟合风险:预剪枝的"贪心"本质可能带来问题。有些分支的当前划分虽不能提升泛化性能,甚至可能导致暂时下降,但在其基础上进行的后续划分却可能导致性能显著提升。预剪枝基于"贪心"本质禁止这些分支展开,给预剪枝决策树带来了欠拟合的风险。

3. 后剪枝

3.1 后剪枝的定义

后剪枝则是先从训练集生成一棵完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化性能提升,则将该子树替换为叶结点。

3.2 后剪枝的过程

基本流程

  1. 生成完整决策树:首先从训练集生成一棵完整的决策树(未剪枝)
  2. 自底向上考察:从最底层的非叶结点开始,自底向上地对每个非叶结点进行考察
  3. 评估剪枝效果:对于每个非叶结点,计算将其子树替换为叶结点后的验证集精度
  4. 决策:如果剪枝后精度提升,则进行剪枝;否则保留该子树

叶结点标记规则

如果进行剪枝,将子树替换为叶结点,该叶结点的类别标记为子树中训练样本数最多的类。

3.3 后剪枝的优缺点

优点

  • 保留更多分支:后剪枝决策树通常比预剪枝决策树保留了更多的分支
  • 欠拟合风险小:一般情形下,后剪枝决策树的欠拟合风险很小
  • 泛化性能好:泛化性能往往优于预剪枝决策树

缺点

  • 训练时间开销大:后剪枝过程是在生成完全决策树之后进行的,并且要自底向上地对树中的所有非叶结点进行逐一考察,因此其训练时间开销比未剪枝决策树和预剪枝决策树都要大得多

4. 预剪枝与后剪枝的比较

4.1 对比总结

特性 预剪枝 后剪枝
剪枝时机 决策树生成过程中 完整决策树生成后
剪枝方向 自顶向下 自底向上
树的结构 通常更简单(决策树桩) 通常保留更多分支
过拟合风险 较低 较低
欠拟合风险 较高(贪心本质) 较低
泛化性能 一般 通常更好
训练时间 较短 较长
测试时间 较短 中等

4.2 选择建议

  • 预剪枝:适用于训练数据量大、对训练时间要求高的场景,但需要注意欠拟合风险
  • 后剪枝:适用于对泛化性能要求高、训练时间相对充裕的场景,通常能获得更好的性能

5. 总结

决策树剪枝是决策树学习算法对付过拟合的主要手段。

两种基本策略

  1. 预剪枝:在决策树生成过程中,对每个结点在划分前进行估计,若划分不能带来泛化性能提升,则停止划分
  2. 后剪枝:先生成完整决策树,然后自底向上地对非叶结点进行考察,若替换为叶结点能提升泛化性能,则进行剪枝

核心要点

  • 剪枝的目标是降低过拟合风险,提高模型的泛化性能
  • 预剪枝和后剪枝各有优缺点,需要根据具体场景选择
  • 预剪枝训练时间短但可能欠拟合,后剪枝泛化性能好但训练时间长
  • 通常采用留出法划分训练集和验证集来评估剪枝效果

实际应用

在实际应用中,后剪枝通常能获得更好的泛化性能,但需要更多的计算资源。预剪枝则更适合对训练时间有严格要求的场景。

相关推荐
逻辑君12 小时前
认知神经科学研究报告【20260071】
人工智能·深度学习·机器学习·数学建模
deephub12 小时前
相关性与因果性:识别伪相关以提升模型在真实环境的可用性
人工智能·机器学习·数据挖掘·数据分析
光之后裔12 小时前
用自定义数据集微调PP-OCRv5文本检测、识别模型
python·机器学习·ocr
qq_3829492214 小时前
企业级机器学习落地实战(含源码与课件)
人工智能·机器学习
极光代码工作室14 小时前
基于机器学习的金融风险预测系统
python·深度学习·机器学习·ai·系统设计
zzzzzz31014 小时前
LMCache 深度解析:LLM 推理加速的秘密武器,TTFT 降低 13 倍是怎么做到的?
pytorch·机器学习·orm
Smilecoc14 小时前
决策树(三):剪枝
算法·决策树·剪枝
Smilecoc14 小时前
决策树(四):决策树实战之鸢尾花分类
算法·决策树·分类
小糖学代码15 小时前
机器学习:9.贝叶斯分类器
人工智能·机器学习
MemoriKu15 小时前
Flutter 相册 APP 收尾优化实战:未分析任务横幅持久隐藏与标签回归测试补强
大数据·人工智能·flutter·elasticsearch·机器学习·搜索引擎·重构