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

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. 总结

方法 目标 手段 适用场景
剪枝 防止单棵树过拟合 简化树结构(预剪枝/后剪枝) 需要单一可解释模型,或作为决策树训练的必须步骤
随机森林 提高预测精度和稳定性 构建多棵随机树,集成投票 追求高准确率,能接受模型复杂度增加(黑箱)
相关推荐
硅谷秋水1 小时前
从机制角度看视频生成作为世界模型:状态与动态
深度学习·机器学习·计算机视觉·语言模型·机器人
?Anita Zhang2 小时前
联邦学习实战:如何在分布式场景下构建隐私保护机器学习模型
人工智能·分布式·机器学习
kebijuelun2 小时前
STAPO:通过“静音”极少数伪噪声 Token,稳定 LLM 强化学习
人工智能·深度学习·机器学习
weixin_贾2 小时前
深度学习基础理论与 PyTorch 实战 —— 从传统机器学习到前沿模型全攻略
pytorch·深度学习·机器学习
NGBQ121382 小时前
140万行网络流量数据集分析报告-包含正常流量与僵尸网络流量的多维度特征数据-适用于网络安全分析、机器学习模型训练、入侵检测系统开发的高质量数据集
安全·web安全·机器学习
小陈phd10 小时前
多模态大模型学习笔记(七)——多模态数据的表征与对齐
人工智能·算法·机器学习
Ro Jace12 小时前
分岔机制学习
人工智能·学习·机器学习