集成学习 · Bagging / Boosting

集成学习:三个臭皮匠的胜利

单个模型有短板?让一队模型分工互补。这里的基学习器弱得离谱——每个只会「横平竖直切一刀」的树桩——但 Bagging 让它们投票,Boosting 让它们接力,圆圈就这样被围了出来。集成不是玄学:它有两条完全不同的技术路线,对应「方差」与「偏差」两种病。

决策区域 · 集成之后的边界

Boosting 模式下,点越大代表它当前分得的权重越大——被前面树桩做错的样本会被下一棵重点照顾。

控制台

单个树桩准确率—
集成准确率—
基学习器 N15
当前方法Bagging

原理:Bagging 与 Boosting

两种思路,殊途同归——但治的病不同:

  • Bagging(Bootstrap AGGregatING)平行训练:对训练集做有放回抽样(自助采样 bootstrap),抽 N 份各训一个学习器,最后多数投票/取平均。采样让每个成员看到的「世界」略有不同,预测的差异被投票平均掉——专治方差大(对数据敏感、一换数据就变样)的模型。
  • Boosting(以 AdaBoost 为代表)串行训练:每一步加大上一个学习器做错样本的权重,后面的学习器专门补前面的短板,最后按表现加权投票——直接修偏差(模型太简单、系统性错同一个方向)。

Bagging:f(x) = majority{ h₁(x), …, hN(x) }  ,  Boosting:f(x) = sign( Σₜ αₜhₜ(x) ),αₜ = ½ ln((1−εₜ)/εₜ)

AdaBoost 的 αₜ 公式很直白:错误率 εₜ 越低,这个学习器的话语权 αₜ 越大;εₜ = 0.5 时 α = 0(和瞎猜一样就没话语权)。随后做错样本的权重放大、做对的缩小,逼下一个学习器盯着难点。

为什么 Bagging 配「不稳定」学习器

「诚实备注」里那句话展开说:树桩对数据扰动太不敏感(稳定),自助采样抽出来的 N 份数据训出的 N 个树桩几乎一样——投票投了个寂寞。而深决策树换个样本就长成完全不同的形状(高方差、不稳定),Bagging 平均它们的「神经质」效果拔群——随机森林 = 深树 + Bagging + 特征随机(每次分裂只看随机 √d 个特征,进一步让树彼此更不同),由此成为最强的开箱即用模型之一。

Boosting 家族的进化

  • AdaBoost:用样本权重纠错(本页实现)。
  • GBDT:换思路——每棵新树拟合前面全体模型的残差(负梯度),像数值优化一样一步步下山。
  • XGBoost / LightGBM:GBDT 的工业级实现,加二阶梯度、正则化、列采样与工程优化,是表格数据竞赛的常青树。
  • 共同软肋:串行难并行、对噪声标签敏感(Boosting 会拼命拟合噪声)、树桩式 Boosting 在「平衡」数据上容易把少数类边缘推得过窄。

三个值得动手验证的现象

  • 树桩有多弱?指标条里的「单个树桩准确率」:环形数据上一个只会切一刀的树桩也就 65% 上下——比瞎猜强不了多少。
  • N 越大越圆润。把 N 从 1 拉到 49:Bagging 的锯齿边界逐渐平滑(方差被平均掉);Boosting 的圆圈越来越规整(偏差被一步步修掉)。
  • 两种方法气质不同。Boosting 模式下画布上的点大小不一——那是样本权重;Bagging 的点永远一样大。前者纠错、后者防抖,看边界形状就能分辨。

动手实验:同一份数据先跑 Bagging 记下集成准确率,再跑 Boosting 对比——本页树桩场景下 Boosting 提升显著(它在修偏差),换到深树上 Bagging 会翻身(去读随机森林那节)。

知识点拆解:把集成学扎实

前提

「好而不同」缺一不可

集成有效需要个体准确(好)且彼此多样(不同)。多样性从哪来:数据扰动(Bagging)、特征扰动(随机森林)、标签扰动、参数扰动——期末考「为什么集成有效」就答这两条。

对应演示:换数据重训看成员差异
诊断

先分清方差病还是偏差病

高方差(训练稳但换数据就崩)→ Bagging / 随机森林;高偏差(怎么训都差同一个数)→ Boosting。选错药方,越集成越糟。

对应演示:单桩 vs 集成准确率差值
方差悖论

自助采样只用了 63.2% 的数据

N 次有放回抽样,任一样本始终抽不到的概率趋 (1−1/N)ᴺ → e⁻¹ ≈ 36.8%——这 36.8% 叫袋外样本(OOB),正好当免费验证集用,是随机森林的隐藏福利。

关键词:OOB 误差
延伸

Stacking:让模型学着组队

Bagging/Boosting 是固定规则(投票/加权),Stacking 再训一个「元学习器」学习怎么组合各模型的输出——三层结构要小心数据泄漏(元学习器的训练数据要用交叉验证生成)。

关键词:元学习器 / 交叉验证生成
  • Bootstrap — 有放回重采样
  • Bagging — 采样并行 + 投票,主降方差
  • Boosting — 串行纠错,主降偏差
  • 随机森林 — 深树 + Bagging + 特征随机
  • OOB — 袋外样本,免费验证集
  • GBDT — 用新树拟合残差的 Boosting

期末高频问答

  • 为什么随机森林的树要深、而 GBDT 的树常设 3~6 层浅桩?随机森林靠平均方差,成员要「各自完整」所以深;GBDT 靠叠加修偏差,每棵只学一点点残差,浅树防过拟合并保留后续树的学习空间。
  • Boosting 会不会把准确率推到 100%?训练集上可能接近,但那是在拟合噪声。AdaBoost 会给噪声样本指数级加权,反而最先过拟合——验证集指标开始掉就该停(early stopping)。
  • 集成一定比单模型好吗?不一定。「好而不同」不满足时(成员全一样或全错在同一处)集成无增益甚至更差;且失去可解释性、推理成本 N 倍——工程里要在精度与成本间权衡。