Skip to content
知识

/knowledge/ensemble-methods

集成方法与梯度提升

一个由平庸模型组成的委员会,可靠地击败一个单独的杰出模型。那个反直觉的事实,驱动着几乎赢下每一场表格数据竞赛的算法——而它为什么管用,值得弄懂。

学于
集成方法与梯度提升进阶 · 表格数据的主力
时间
机器学习课程与实践
应用于
结构化数据的首选
阅读 / 复习
约 16 分钟阅读2026-06-26

在实用机器学习的核心,有一个惊人的结果:你可以拿一堆平庸的模型——每一个都只比瞎猜好 一点点——巧妙地组合它们,最终得到一个现有最准确的预测器之一。这就是集成学习,而它 不是一个小众的把戏。对大多数真实世界分析所依赖的结构化、表格数据而言,随机森林梯度提升这样的集成方法是当朝的冠军——它们赢下竞赛,并静悄悄地驱动着大量的生产 建模。

这一页从头搭起这个想法:为什么一群模型胜过一个个体、构建那群模型的两大策略(bagging 与 boosting),以及梯度提升——XGBoost 及其同类——如何成了在表格数据上默认第一个要试的东西。它直接 建立在机器学习页的偏差-方差想法之上。

01

为什么许多弱模型胜过一个强模型

直觉是群体的智慧。让一个人猜一罐子里有多少颗软糖,他会猜偏;把一千个猜测求平均, 答案却近得出奇——那些个体的误差,因为部分随机且相互独立,互相抵消了。集成学习对模型做的正是 这件事:组合许多误差去相关的预测器,错误便平均掉,而共享的信号则相互加强。

关键的词是去相关。把一千个一模一样的模型求平均,你什么也得不到——它们都犯 同一个错误。集成的全部艺术,是构建一些各自尚可、却彼此相异的模型,好让它们的误差不 对齐。下面那两个家族,是对「我们如何让它们相异?」的两个不同答案。

02

树,及其有用的缺陷

几乎所有著名的集成都是用决策树搭起来的——一种由是/否分裂构成的流程图(「年龄 > 40 吗?那么收入 > 5 万吗?……」),它把数据切成若干区域、在每个区域内做预测。一棵 单独的树极为可解释,并且毫不费力地处理混合的数据类型。

但一棵单独的深树是教科书式的高方差模型:它严重过拟合,把训练数据的噪声背了下来,而数据里一点微小的改动,就会 产出一棵完全不同的树。那种不稳定看起来像个弱点——而它恰恰是让树成为完美集成原料的东西。一个 从样本到样本变化很大的模型,正是你可以大有成效地求平均的那种。集成把树的缺陷变成了它的长处。

03

Bagging 与随机森林

Bagging(自助聚合,bootstrap aggregating)是第一种策略:并行地训练许多 树,每一棵都在数据的一个不同的随机自助样本上,然后把它们的预测求平均(或取多数票)。因为每棵树看到的数据略有不同,每一棵的过拟合 方式也不同——把那些各异的过拟合求平均,就抵消了噪声,在不增加偏差的情况下,大幅削减方差。

随机森林加上了一个绝妙的转折:在每一次分裂时,每棵树只可以考虑特征的一个 随机子集。这阻止了每棵树都依赖同样的一两个占主导的预测因子,迫使它们真正地相异——更多的 去相关,更好的求平均。随机森林稳健、几乎不用调参、给出一个免费的准确度估计(来自每棵树没见过 的数据的袋外误差),并报告有用的特征重要性。它们是可靠的、不闹腾的 默认选择。

04

Boosting:按顺序从错误中学习

Boosting 采取相反的路子。它不是独立的并行树,而是串行地构建它们,每一棵 都聚焦于之前那些树的错误。训练一棵弱树;看它在哪里出错;训练下一棵树去修那些错误;重复。集成 靠不懈地攻击它自己剩余的弱点而成长。

bagging——并行,然后求平均求平均boosting——串行,每个修正上一个树 1树 2树 3树 4每个都在前一个集成的误差上训练 →
两种策略。Bagging 在不同的样本上并行地训练许多树并求平均——削减方差。Boosting 按顺序训练树,每一棵修正上一棵的错误——削减偏差。并行的独立,对串行的修正。

最初的 AdaBoost 靠重新加权来做这件事:被错分的点获得更多权重,于是下一棵树对 它们投以更多注意。bagging 攻击方差之处,boosting 攻击偏差——它靠系统性的 纠错,把一连串弱学习器变成一个单独的强学习器。

05

梯度提升与 XGBoost

梯度提升是这个想法强大而一般的形式。它不重新加权点,而是把每一棵新树训练成去 预测迄今为止集成的残差——也就是误差。把那棵树的修正加上去(被一个学习率 η\eta 收缩),预测就改进了一步:

Fm(x)=Fm1(x)+ηhm(x)F_m(x) = F_{m-1}(x) + \eta\, h_m(x)

这个名字来自一个洞见:拟合残差,其实就是在做梯度下降——每一棵树都是在函数空间里,沿损失的梯度向下的一步。它就是微积分页的优化想法, 被应用到构建一个集成上。

XGBoostLightGBM 是那些经过工程打磨、工业级强度的实现,正是它们 让梯度提升占据了主导。它们加入正则化以遏制过拟合、对缺失值的巧妙处理,以及认真的速度优化。在结构化/表格数据上,它们年复一年地, 仍然是那个要击败的模型——往往是一名从业者第一个伸手去拿的东西,也常常是最后一个,因为在那里 几乎没有别的能胜过它们。

06

Bagging 对 boosting:何时用哪个

两种策略有着互补的性格,而选择取决于出了什么毛病:

  • Bagging / 随机森林——并行,降低方差。稳健、难以过拟合、调参 极少、可并行。安全而强劲的基线。
  • Boosting / XGBoost——串行,降低偏差。调好时通常准确度更高,但 更敏感——它可能过拟合,需要小心调参(学习率、树深、提前停止),而且没法以同样的 方式并行。

07

诚实的代价

集成不是免费的胜利。你接受的那些权衡:

  • 可解释性——一棵单独的树是一张可读的流程图;一片 500 棵提升树的森林则是一个 黑箱。你用不透明买来准确度,而这在任何决定必须被解释之处都要紧。
  • Boosting 可能过拟合——它不懈的追错,最终会去拟合噪声。交叉验证和提前停止不是可选项。
  • 成本——训练并部署数百棵树,比一个模型更沉重。

对不透明的部分答案,是可解释性工具——SHAP 值之类——它把每一个预测归因回它的特征。 有用,但那是事后的一种重建,而非一个简单模型那种货真价实的透明。当解释和答案一样要紧时,那个 权衡必须被诚实地掂量。

08

它在我工作中的体现

09

60 秒回顾

bagging 对 boosting 的取景、把梯度提升看作残差拟合,以及 XGBoost 的正则化/提前停止实务,反映 了当前的集成学习参考文献以及机器学习课程。