2.3 集成学习:Bagging、Boosting与Stacking


2.3 集成学习:Bagging、Boosting 与 Stacking

本节摘要:集成学习通过组合多个基学习器获得比任何单个模型更好的性能与鲁棒性,有效性依赖两个条件——基学习器彼此多样(犯的错不一样)且各自优于随机猜测。三条技术路线:并行的 Bagging(自助采样降方差,代表是随机森林)、串行的 Boosting(迭代拟合残差降偏差,代表是 AdaBoost 与 XGBoost 系)、分层的 Stacking(用元学习器学习如何组合)。集成方法至今仍是表格数据竞赛与工业落地的头号主力。

上手前先明确

阅读完本节,你应当能够:

  1. 说出集成有效性的两个前提条件;
  2. 解释自助采样如何制造基学习器间的多样性;
  3. 区分 Bagging 降方差与 Boosting 降偏差的机制差异;
  4. 描述 Stacking 的两层结构与训练方式;
  5. 说明随机森林相对单棵决策树的两重随机性来源;
  6. 列举集成学习的三项主要代价。

一、为什么"三个臭皮匠"在数学上成立

集成学习的前提条件有两条,缺一不可:

  1. 多样性:各基学习器应当在数据样本、特征子集、模型类型或参数上有所不同。如果所有模型犯完全相同的错误,组合毫无意义——三份同样的错答案凑不出一个对答案;
  2. 准确性:每个基学习器至少要比随机猜测好。一组比抛硬币还差的模型,怎么组合都不会好。

满足这两条时,多个模型的随机性错误在投票或平均中相互抵消,系统性错误则被保留——这就是集成的全部魔法。统计学上表现为:组合能降低方差、降低偏差,或两者同时降低。

二、Bagging:并行采样,降方差

Bagging(Bootstrap Aggregating)的做法:从原始训练集有放回地随机抽样,生成多个规模相同的子集;每个子集独立训练一个基学习器;分类投票、回归平均。

有放回抽样意味着每个子集大约包含六成多的不同样本,剩下样本没被抽到——这种差异性直接转化为基学习器的多样性。因为每个模型都在"略有不同的数据视角"上训练,平均之后各自的波动互相抵消,方差降低、过拟合风险下降

随机森林是 Bagging 的代表:在自助采样的基础上再加一层特征随机性——每棵树分裂时只从随机抽取的一部分特征中挑最优,而不是扫全部特征。两重随机让树与树之间差异更大,集成效果更好,同时天然给出特征重要性排序(工程上非常好用的副产品)。

原始数据集 N 条 ├──自助采样--> 子集1 ──随机特征--> 树1 ──┐ ├──自助采样--> 子集2 ──随机特征--> 树2 ──┼──投票/平均──> 最终预测 └──自助采样--> 子集K ──随机特征--> 树K ──┘

三、Boosting:串行纠错,降偏差

Boosting 是串行的:第 t 轮训练时会更"关照"前几轮预测错的样本(或直接去拟合当前模型的残差),一步步把整体偏差啃下来。最终模型是所有基学习器的加权组合。

演进脉络值得记住:

  • AdaBoost:每轮根据错误率调整样本权重——错分的样本权重变大,下一轮的基学习器被迫重点学习它们;同时按各自表现给每个基学习器分配组合权重;
  • 梯度提升(GBM):把问题统一为"每轮训练一个模型去拟合损失函数的负梯度"。当损失是平方误差时,负梯度恰是残差——拟合残差这个直觉被推广成了通用框架;
  • XGBoost / LightGBM / CatBoost:在梯度提升框架上做工程优化——二阶导数信息、正则化项、列抽样、直方图加速等,性能与效率全面跃升,成为结构化数据任务的事实标准。
维度 Bagging Boosting
训练方式 并行、互相独立 串行、依赖前轮
主要改善 方差(抗过拟合) 偏差(提拟合能力)
对噪声 较鲁棒 较敏感(噪声样本被反复加权)
代表 随机森林 XGBoost、LightGBM
典型风险 提升空间有限 过拟合与噪声放大

一条实用的判断:数据干净、欠拟合(模型太弱)时用 Boosting;数据噪声大、模型容易过拟合时用 Bagging。

四、Stacking:让模型学习"怎么组合"

投票与平均是人为设定的组合规则,Stacking 干脆让另一个模型来学组合方式:第一层训练多个异质基学习器(比如逻辑回归、随机森林、梯度提升各一个);把各基学习器的预测结果当作新特征,构造出一个新数据集;第二层在这个新数据集上训练一个元学习器(通常刻意选简单模型如线性回归,防止叠加过拟合),由它输出最终预测。

两层的分工:基学习器负责"各展所长",元学习器负责"谁在什么情况下更可信"。Stacking 在竞赛叠分中常见,工业界用得相对少——多一层训练管线就多一倍维护成本,除非性能收益明确,两三个模型的简单集成通常更划算。

💡 关键直觉:拿到表格数据不知从何下手时,直接跑一个梯度提升实现(如 XGBoost 或 LightGBM)当第一个模型。它对特征缩放不敏感、自带正则、能吃缺失值,十有八九给出接近天花板的基线——剩下的精力应该花在特征工程上。

⚠️ 常见坑:Boosting 轮数不加限制地训。训练误差能一直降,验证误差却先降后升——串行方法到了某个点之后开始记忆噪声。务必配合早停:验证集损失连续若干轮不改善就停。

五、XGBoost 系的工程细节与调参入门

为什么梯度提升树统治表格数据。 三个工程特性叠加:对特征缩放与缺失值不敏感(预处理负担小)、自带多种正则化手段(树深、叶子数惩罚、列抽样,过拟合可控)、实现高度优化(直方图算法把分裂点搜索的复杂度降了一个量级,百万级样本分钟级训练)。在结构化数据的公开评测里,它长期占据榜首或与深度模型打平但成本低一个数量级。

调参的优先级顺序。 梯度提升树的可调参数十几个,新手常迷失。实践优先级:先固定学习率为 0.1 左右、调树的数量(配合早停)——再调树的复杂度(最大深度、叶子最小样本数)——然后加随机性(行采样、列采样比例)——最后把学习率降到 0.01 再相应增加树数做终局打磨。按这个顺序走,九成场景不需要碰其余参数。

特征重要性的正确用法。 树集成输出的特征重要性是极好的探索工具——发现泄漏特征(重要度异常高)、辅助特征取舍、向业务方展示"模型主要看什么"。但它有两个坑:偏向高基数特征(取值多的特征容易虚高,改用增益或置换重要性可缓解),以及重要不等于因果(只说明模型依赖它,不说明现实中改变它会改变结果)。

常见问题

随机森林和 XGBoost 都能跑,选哪个? 默认选 XGBoost 系:同等调参投入下性能通常更高。两种情况例外——数据噪声极大、追求极致稳健时随机森林更钝感;团队经验浅、需要"不调参也不翻车"的方案时随机森林的默认配置更宽容。

集成能救一个糟糕的特征集吗? 不能,这是最常见的幻想。集成放大的是"弱但多样的信号",特征里根本没有的信号,多少个模型投票也投不出来。特征工程的短板必须回到 5.1 节的方法补齐,集成只是让好特征发挥得更充分。

什么时候集成不再划算? 两个信号:交叉验证里简单模型与集成差距小于一个百分点,且业务并不需要这一点的性能——直接用简单模型,换取可解释性与运维简单。性能之外的账本(部署复杂度、推理延迟、监控成本)经常把天平拉回简单模型一侧。

温故知新

  • 两个前提:基学习器要多样、要各自优于随机——错误能抵消是因为错误互不相同;
  • Bagging 降方差:自助采样制造数据视角差异,随机森林再叠加特征随机性;
  • Boosting 降偏差:串行拟合残差或负梯度,XGBoost 系是工程化巅峰;
  • Stacking 学组合:元学习器基于基学习器预测输出再学一层,宜简不宜繁;
  • 选路判断:噪声大怕过拟合选 Bagging,模型弱欠拟合选 Boosting;
  • 三项代价:计算成本、可解释性下降、存储与部署复杂度增加。

三大范式都讲完了,下一节用一张选型决策表把它们变成可执行的操作。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U