什么是集成学习?为什么多个弱模型组合能变强?
简化版
集成学习(Ensemble Learning) 用投票、平均、加权或元模型组合多个基学习器。它有效的核心是“有预测力且错误有差异”:低相关误差可被平均抵消,串行模型则能沿当前错误继续优化;准确率大于 50% 只是独立同分布二分类硬投票的经典充分条件,不是所有集成任务的通用门槛。Bagging 通常通过重采样并行建模、主要降低方差;Boosting 逐轮依赖当前模型、通常主要降低偏差。
详细版
集成为什么有效——两个前提:
- 每个基学习器要「好」:准确率 > 50%(比随机好),否则组合起来更差。
- 基学习器要「不同」(多样性):错误不相关,才能在投票中互相抵消。
投票抵消错误的直觉: 假设 3 个独立分类器各自准确率 70%,多数投票(≥2 个对就对)的准确率 = 0.7³ + 3×0.7²×0.3 ≈ 78.4% > 70%。基学习器越多、越独立,提升越明显。
两大流派:
| Bagging | Boosting | |
|---|---|---|
| 训练方式 | 基模型可并行拟合,误差通常相关 | 串行,后者依赖当前整体 |
| 数据 | 常用 Bootstrap 子集 | 可重加权或拟合梯度,也可配合行/列采样 |
| 主要作用 | 降方差 | 降偏差 |
| 代表 | 随机森林 | AdaBoost、GBDT、XGBoost |
第三类:Stacking——用一个「元模型」学习如何组合多个异质模型的输出。
完整版教学
一、集成学习的基本思想:三个臭皮匠顶个诸葛亮
单个模型(尤其简单模型)能力有限:决策树高方差、单个弱分类器可能只比抛硬币强一点。集成学习的思路是——不追求单个模型很强,而是训练很多个模型,让它们「集体决策」:分类任务多数投票、回归任务取平均或加权。
这像向多个擅长不同领域的专家征求意见:若大家只是复述同一判断,人数增加没有价值;只有信息来源和错误模式互补时,聚合才可能更稳。集成的收益必须由独立验证证明,同时计算、延迟和维护成本也会随模型数量增长。
二、为什么有效——关键是「好而不同」
集成能变强,不是模型多就行,需要两个前提:
前提一:基学习器要对目标有信息。 在独立、等准确率、等权二分类硬投票的推导中,单模型准确率大于 50% 才会随投票器增加而受益;回归、多分类、加权投票和 Boosting 的条件并不能简化为这个阈值。实践中应直接检查交叉验证表现和残差结构。
前提二:基学习器要「不同」——有多样性。 这是最关键的。如果所有基学习器一模一样(犯同样的错),投票 100 次和投票 1 次没区别,集成毫无意义。当它们的错误不完全同向、相关性较低时,投票才能让「你错的地方我对、我错的地方你对」互相抵消,整体才准。
记忆锚点:集成有效 = 每个都还行(好)+ 大家犯的错不一样(不同)。
三、用数字看「投票抵消错误」
假设有 3 个相互独立的分类器,每个准确率都是 70%(错误率 30%)。用多数投票(3 个里至少 2 个对,结果就对):
组合正确的概率
= P(3个都对) + P(恰好2个对)
= 0.7³ + C(3,2)×0.7²×0.3
= 0.343 + 3×0.49×0.3
= 0.343 + 0.441
= 0.784 → 78.4% > 单个的 70%
在这个三模型、独立同分布且单模型准确率为 70% 的例子里,组合准确率从 70% 提升到 78.4%。只有在二分类硬投票、各模型独立同分布且准确率固定大于 50% 等理想条件下,增加奇数个模型才会让多数票错误概率趋近于 0;现实模型误差相关,收益会受相关性限制并逐渐饱和。数据采样和特征采样的目的,是降低错误相关性,而不是让模型获得统计独立保证。
四、从偏差-方差看两大流派
集成误差同样可拆成偏差和方差,两大流派各主攻一头:
Bagging(Bootstrap Aggregating)——主要降方差。
- 并行训练多个基学习器,每个使用自助采样得到的数据子集;这些拟合任务可并行,但共享原始样本使误差通常相关。
- 预测时平均/投票。多个高方差模型(如未剪枝的深树)平均之后,方差被显著削减;若单模型方差为 σ²、相关系数为 ρ,B 个模型平均方差约为
ρσ²+(1-ρ)σ²/B,偏差也只是在常见设置下变化较小。 - 所以 Bagging 用来驯服高方差模型,代表是随机森林(Bagging + 特征随机)。
Boosting——主要降偏差。
- 串行训练:每个新模型专门去纠正前面模型犯的错(提高被分错样本的权重,或拟合前面的残差/梯度)。
- 一步步把「欠拟合的弱模型」叠加成「强模型」,逐步降低偏差。
- 代表是 AdaBoost、GBDT、XGBoost。
理解这个分工(Bagging 降方差、Boosting 降偏差)是集成学习的主线(详见对应专题)。
五、第三类:Stacking
除了 Bagging 和 Boosting,还有 Stacking(堆叠):训练多个异质的基学习器(如同时用逻辑回归、SVM、随机森林),再用一个元模型(meta-learner) 学习「如何组合这些基学习器的输出」。它不像 Bagging/Boosting 那样用同类模型,而是融合不同类型模型的优势,常用于竞赛冲榜(详见 Stacking 专题)。
Stacking 的关键不是简单地把训练集内预测交给元模型,而是为每个训练样本生成 out-of-fold(OOF)预测:产生该预测的基模型不能见过这个样本。预处理、特征选择和调参也应在各折内部完成,否则即使预测形式是 OOF 仍可能泄漏。测试阶段再用折模型预测后平均,或在全量训练集重训基模型,生成与元训练特征定义一致的输入。
六、常见追问
- 基学习器为什么常受限? 并非定义上必须“弱”。Boosting 常用浅树控制每轮新增容量,Bagging 常用不稳定的较深树压方差;最佳容量仍需验证。
- 多样性怎么来? 数据层面(自助采样、样本加权)、特征层面(随机特征子集)、模型层面(不同算法/参数/随机种子)。
- 集成一定更好吗? 通常更稳更准,但代价是计算/存储更大、可解释性下降;基学习器太相似或本身太差时提升有限。
- 为什么树最常做基学习器? 树高方差、对数据敏感(易产生多样性)、能处理各种特征、无需缩放——非常适合做集成的基。
七、用多数投票算清“弱变强”的条件
3 个二分类器若错误独立且各自错误率 0.3,多数投票出错需要至少 2 个错,概率是 C(3,2)×0.3²×0.7+0.3³=0.216,低于单模型 0.3。若三个模型总在同一批样本上一起犯错,投票错误率仍接近 0.3;因此“有一定能力”和“错误有差异”缺一不可。
P(majority wrong, B=3) = 3*e^2*(1-e) + e^3
at e=0.3 => 0.216
diversity reduces correlated error; voting alone creates no new information
| 对象/方案 | 核心机制 | 选择或风险 |
|---|---|---|
| Bagging | 重采样并行训练后平均 | 主要利用平均降方差 |
| Boosting | 串行沿错误/梯度方向加模型 | 主要逐步降低偏差 |
| Stacking | 用 OOF 预测训练元模型 | 学习非固定组合权重 |
选择有能力且有差异的基模型
→ 设计训练依赖(并行/串行/分层)
→ 无泄漏聚合 → 独立验证
记忆钩子:集成有效的条件不是“模型越多越好”,而是基模型既要有用,错误又不能高度同向。
八、常见误区与追问
- 误区:把任意弱模型堆得足够多都能变强。 若模型劣于随机或错误完全相关,数量不会自动创造收益。
- 误区:模型结构不同就一定有多样性。 应在 OOF 预测或残差相关性上验证实际差异。
- 追问:分类只能用硬投票吗? 还可做概率平均、加权平均或元学习。
- 追问:集成一定牺牲可解释性吗? 通常更复杂,但可用受约束权重、蒸馏和归因工具缓解。
- 追问:如何判断还值得加模型? 看独立验证增益、误差相关性、延迟和维护成本。
九、加强记忆
集成学习 = 组合多个弱学习器成强学习器(投票/平均/加权),信念是「集体优于个体」。有效的主线是**「好而不同」:基学习器要对目标有预测力,且错误不能完全同向;“准确率 >50%”只适用于特定二分类硬投票推导,不是所有回归、多分类和加权集成的通用门槛,这样投票能抵消彼此不相关的错误**(3 个独立的 70% 分类器投票→78.4%,在独立同分布假设下增加奇数个投票器可继续降低多数错误概率)。多样性靠数据采样、特征采样、不同模型制造。两大流派按偏差-方差分工:Bagging(并行、自助采样、平均,主降方差,代表随机森林)、Boosting(串行、逐步纠错,主降偏差,代表 AdaBoost/GBDT/XGBoost);还有 Stacking(元模型学习组合异质模型)。树因高方差、易产生多样性、无需缩放,最常做基学习器。