决策树的优化-剪枝和随机森林

1. 剪枝 (Pruning)

1.1 为什么需要剪枝?

决策树在训练时,如果任由其生长,可能会为了拟合训练数据中的每一个细节(包括噪声)而变得非常复杂。这样的树在训练集上表现完美,但在未见过的测试集上往往表现很差,也就是过拟合

例子

沿用之前的打球数据集(天气与打球的关系),假如我们添加了一个特征"今天是否是我的幸运日",而这个特征在训练集中纯属巧合地与打球结果相关,决策树可能会用它来划分,导致模型在真实数据上失效。

剪枝就是通过删除树中那些对预测能力贡献不大、主要拟合了噪声或个别样本的枝叶,来简化模型,提高泛化能力。

1.2 剪枝的类型

主要分为预剪枝后剪枝

预剪枝 (Pre-pruning)

在决策树生长过程中,提前停止分裂。

  • 方法:设定一个阈值,比如信息增益小于某个值、节点包含的样本数少于某个数、树达到一定深度等,就停止分裂,将该节点直接作为叶节点,其类别为多数类。

  • 优点:效率高,边建树边剪枝。

  • 缺点:可能过早停止,导致欠拟合;阈值难以把握。

后剪枝 (Post-pruning)

先让树充分生长(甚至过拟合),然后自底向上对非叶节点进行考察,判断将其替换为叶节点是否能提升泛化性能。

  • 常用方法代价复杂度剪枝 (Cost Complexity Pruning)错误率降低剪枝 (Reduced Error Pruning)

  • 步骤

    1. 生成一棵完全生长的树。

    2. 从底向上,尝试将某个子树替换为一个叶节点(叶节点的类别取该子树中样本最多的类别)。

    3. 用验证集评估替换前后的误差:如果替换后误差不增大(或下降),则进行剪枝,否则保留原树。

  • 优点:更可靠,通常比预剪枝效果好。

  • 缺点:需要额外的验证集,计算开销大。

1.3 直观理解

想象一棵长满枝叶的树,每个枝叶代表一个决策规则。剪枝就像园艺师修剪掉那些"无用"或"有害"的枝条,让树的主干更清晰,生命力更强(泛化能力更好)。


2. 随机森林 (Random Forest)

随机森林是一种集成学习方法,它通过构建多棵决策树并将它们的预测结果进行投票(分类)或平均(回归)来获得最终输出。

2.1 核心思想

  • 集成学习:多个弱学习器组合成一个强学习器。如果每棵树都有些许差异,它们集体决策会比单棵树更稳定、准确。

  • Bagging (Bootstrap Aggregating) :对原始训练集进行有放回采样,生成多个不同的子训练集,每棵树在不同的子集上训练。

  • 随机特征选择 :在每个节点分裂时,不是从所有特征中选最优,而是随机选择一部分特征(通常是 sqrt(总特征数) 或 log2(总特征数)),然后从中选最优特征分裂。这增加了树之间的多样性。

2.2 构建过程

  1. 假设原始训练集有 N 个样本,M 个特征。

  2. 对于每一棵树(共 T 棵):

    • 从原始训练集中有放回地抽取 N 个样本,形成一个自助样本集 (bootstrap sample)。未被抽到的样本(约1/3)称为袋外数据 (OOB),可用于评估模型。

    • 在构建树的每个节点时,随机选择 m 个特征(m << M),然后根据信息增益等准则从这 m 个特征中选择最佳分裂特征。

    • 每棵树充分生长,通常不进行剪枝

  3. 预测时,分类问题采用多数投票,回归问题采用平均值。

2.3 为什么随机森林效果好?

  • 降低方差:单棵决策树对数据变化敏感(高方差)。通过 Bagging 和随机特征选择,多棵树的平均可以显著降低方差,同时保持较低的偏差。

  • 防止过拟合:由于每棵树只看到部分样本和部分特征,它们不会过度拟合训练数据中的噪声。即使个别树过拟合,投票机制也能抵消其影响。

  • 自带特征重要性评估:利用 OOB 数据或记录特征在树分裂中带来的纯度提升总和,可以评估每个特征的重要性。

2.4 剪枝 vs 随机森林

  • 剪枝是对单棵树的"减法"操作,旨在简化模型。

  • 随机森林是对多棵树的"加法"操作,通过组合来平衡偏差和方差。通常,随机森林中的树都保持完全生长(不剪枝),因为其方差已通过平均被控制,而完全生长的树偏差较低,组合后性能更好。

  • 在某些场景下,对随机森林中的每棵树进行适度剪枝可能会进一步提升效率,但多数实践表明让树充分生长即可。


3. 总结

方法 目标 手段 适用场景
剪枝 防止单棵树过拟合 简化树结构(预剪枝/后剪枝) 需要单一可解释模型,或作为决策树训练的必须步骤
随机森林 提高预测精度和稳定性 构建多棵随机树,集成投票 追求高准确率,能接受模型复杂度增加(黑箱)
相关推荐
生信碱移4 小时前
PACells:这个方法可以鉴定疾病/预后相关的重要细胞亚群,作者提供的代码流程可以学习起来了,甚至兼容转录组与 ATAC 两种数据类型!
人工智能·学习·算法·机器学习·数据挖掘·数据分析·r语言
哥布林学者5 小时前
深度学习进阶(十三)可变形卷积 DCN
机器学习·ai
AI自动化工坊7 小时前
Hugging Face ml-intern技术深度解析:AI机器学习工程师的工程实践
人工智能·机器学习·huggingface·ml-intern·ai机器学习
AI手记叨叨8 小时前
机器学习可解释性工具SHAP
机器学习·shap
高洁019 小时前
大模型部署资源不足?轻量化部署解决方案
python·深度学习·机器学习·数据挖掘·transformer
折哥的程序人生 · 物流技术专研10 小时前
从“卡死”到“秒过”:WMS销售数据跨库回填的极限优化之旅
数据库·机器学习·oracle
我是发哥哈11 小时前
主流AI框架生产环境性能对比:5大关键维度深度评测
大数据·人工智能·学习·机器学习·ai·chatgpt·ai-native
雷帝木木11 小时前
Python 并发编程的高级技巧与性能优化
人工智能·python·深度学习·机器学习
折哥的程序人生 · 物流技术专研12 小时前
WMS智能调度实战:构建机器学习特征表的完整指南
人工智能·机器学习
AI科技星13 小时前
人类首张【全域数学公理体系】黑洞内部结构图—基于「0-1-∞」三元本源的全维深度解析
人工智能·算法·机器学习·数学建模·数据挖掘·量子计算