Bagging 和 Boosting 有什么区别?
简化版
Bagging 和 Boosting 是集成学习的两大流派。Bagging(如随机森林):并行训练多个条件上可独立拟合、但统计误差通常相关的基学习器,每个用自助采样的不同数据子集,预测时平等地投票/平均;它主要降低方差(多个高方差模型平均后方差骤降),常搭配低偏差、高方差且不稳定的模型(如较深树)。Boosting(如 AdaBoost、GBDT):串行训练,每个新模型专门纠正前面模型的错误(加大错分样本权重 / 拟合残差),预测时加权组合;它主要降低偏差(把弱模型逐步叠加成强模型),常用受限浅树控制每轮步幅,但容量仍需验证。记忆锚点:Bagging 并行降方差、Boosting 串行降偏差。
详细版
核心对比:
| 维度 | Bagging | Boosting |
|---|---|---|
| 训练方式 | 并行(可同时训练) | 串行(依赖前一个) |
| 基学习器关系 | 可并行拟合,误差通常相关 | 后者依赖当前整体模型 |
| 数据 | 典型做法是 bootstrap 不同子集 | 可用全量,也可随机行/列采样 |
| 每轮目标 | 各自拟合同一原任务 | AdaBoost 改权重;梯度提升拟合负梯度 |
| 组合权重 | 经典 Bagging 平均/投票 | AdaBoost 学 α;梯度提升按步长累加 |
| 主要降低 | 方差 | 偏差 |
| 基学习器倾向 | 强(低偏差高方差,如深树) | 弱(高偏差低方差,如浅树) |
| 过拟合风险 | 平均常降方差,但不能修复泄漏/偏差 | 容量随轮数增长,需正则与早停 |
| 代表 | 随机森林 | AdaBoost、GBDT、XGBoost |
为什么 Bagging 降方差、Boosting 降偏差(核心):
- Bagging:若误差方差为 σ²、两两相关为 ρ,B 个模型平均的方差约为
ρσ²+(1-ρ)σ²/B;只有理想独立时才是 σ²/B,偏差也并非数学上永远不变。 - Boosting:每轮沿当前损失的改进方向增加模型,常降低欠拟合;训练误差不等于统计偏差,偏差和方差都可能变化。
完整版教学
一、两条不同的集成路线
集成学习要让多个基学习器「好而不同」,但制造多样性和组合的方式有两种截然不同的路线:
- Bagging:让基学习器各自独立地在不同数据子集上学,然后平权综合——靠「独立 + 平均」降方差。
- Boosting:让基学习器接力式地一个纠正一个的错误,然后加权综合——靠「逐步纠错」降偏差。
理解它们的区别,关键抓住训练方式(并行/串行)和主攻目标(方差/偏差) 两条。
二者不能只按“并行/串行”背诵,还要说明统计目标:对高方差基学习器取平均,方差下降幅度受模型间相关系数限制;Boosting 每轮沿当前组合模型的错误或损失梯度新增学习器,主要改善偏差。实际模型也会交叉使用技巧,例如随机梯度提升同时做行采样,因此分类依据是训练依赖和组合机制,而不是是否出现采样。
二、Bagging:并行 + 自助采样 + 平权平均
Bagging = Bootstrap Aggregating(自助采样聚合),流程:
- 从训练集有放回地随机抽样(bootstrap),得到多个大小相同但内容不同的子集。
- 每个子集独立训练一个基学习器(互不影响,可并行)。
- 预测时平权组合:分类多数投票、回归取平均。
关键特征:
- 基学习器可在给定重采样数据后并行拟合、聚合时地位平等;因为共享原始训练集,它们的误差通常并不独立。
- 每个只看到部分(约 63%)样本(自助采样的性质),制造了数据层面的多样性。
- 随机森林在此基础上再加「每次分裂随机选特征子集」,进一步增加多样性。
三、Boosting:串行 + 逐步纠错 + 加权组合
Boosting 流程完全不同:
- 先训练一个基学习器。
- 看它在哪些样本上错了,让下一个基学习器重点关注这些错样本(AdaBoost 提高错分样本权重;GBDT 让下一棵树拟合当前的残差/负梯度)。
- 串行训练一串这样「后者补前者短板」的模型。
- 预测时做加法组合:AdaBoost 根据加权错误率学习
α_t;GBDT 通常按学习率和叶值累加,并不是按单棵准确率排序赋权。
关键特征:
- 基学习器串行、有依赖(后一个依赖前一个的结果,不能并行)。
- 每轮聚焦难样本,逐步把整体误差压下来。
四、核心区别:为什么 Bagging 降方差、Boosting 降偏差
这是本题的重点,也是面试必答。
Bagging 降方差:
- 若模型方差相同为
σ²且相互独立,平均方差为σ²/n;真实 Bagging 模型通常相关,应使用含ρ的公式。平均对偏差的影响取决于学习器和重采样分布,常较小但并非严格不变。 - Bagging 特别适合高方差学习器,如较深决策树。基树过浅会让共同偏差过大,过深又增加计算与相关噪声;深度和叶约束仍应验证,不能概括成“越强越好”。
Boosting 降偏差:
- 每一轮都在拟合当前整体模型的错误方向,相当于逐步给函数加补丁,经验训练损失通常下降并缓解欠拟合;这不等于统计偏差的定义,也不保证验证误差单调下降。
- Boosting 常以浅树控制每一轮新增容量,让许多小步组合成强模型;更深树也可用于表达高阶交互,只是需要联合调整轮数、学习率、采样和正则,不能说“基学习器必须弱”。
对照锚点:Bagging 用随机化后的平均主要压方差,Boosting 用串行加法优化常缓解欠拟合;“深树/浅树”是典型配置,不是定义。
五、其他重要差异
- 过拟合风险:Bagging 的平均天然抗过拟合,固定随机森林生成机制下增加树数通常使预测趋于稳定,但有限验证指标仍会波动,且不能修复有偏数据或错误设定;Boosting 会不断降训练误差,如果轮数太多、学习率不当,可能过度拟合噪声(把错样本里的噪声也硬学),需要早停、学习率、正则控制。
- 对噪声/离群点:Boosting 因为聚焦错样本,对噪声更敏感(噪声样本一直被加权关注);Bagging 相对鲁棒。
- 并行性:Bagging 天然可并行(训练快);Boosting 串行(较慢,但 XGBoost/LightGBM 在单棵树内部做了并行优化)。
- 组合方式:经典 Bagging 平均;AdaBoost 学分类器权重;梯度提升把每轮叶值乘 shrinkage 累加,不能把所有 Boosting 都概括为“按表现加权”。
六、常见追问
- 随机森林和 GBDT 哪个好? 看场景:随机森林更稳、易调、抗过拟合、可并行;GBDT/XGBoost 精度通常更高但更需调参、对噪声更敏感(详见 GBDT vs 随机森林专题)。
- Boosting 为什么用弱学习器? 弱(浅树)偏差高、方差低,正好让 Boosting 去降偏差;用强学习器会过拟合、失去多样性。
- Bagging 能降偏差吗? 主要收益常是降方差,但对非线性学习器做重采样再平均也可能改变偏差,不能保证严格不变。
- 两者能结合吗? 可以,如对 GBDT 做行/列采样(借鉴 Bagging 思想增加多样性、防过拟合),XGBoost 就用了子采样。
七、用相关方差与串行残差做数值对照
若 10 棵树单棵预测方差都是 1、两两相关系数 ρ=0.2,平均后的方差约为 0.2+0.8/10=0.28,并不是 0.1;这解释了随机森林还要随机选特征来降低相关性。Boosting 的另一侧是串行修正:初始预测 6、真实值 10,下一棵树若学到残差 3,再乘学习率 0.2,只把整体更新到 6.6。
Var(mean) = rho*sigma^2 + (1-rho)*sigma^2 / B
Bagging: F(x) = average_b f_b(x)
Boosting: F_t(x) = F_{t-1}(x) + eta * h_t(x)
| 对象/方案 | 核心机制 | 选择或风险 |
|---|---|---|
| 训练依赖 | Bagging 各模型条件独立训练 | Boosting 后一轮依赖当前整体 |
| 随机化 | Bootstrap/特征采样 | 可用行列采样但核心是串行优化 |
| 主要作用 | 常用于压高方差 | 常用于降偏差,也会影响方差 |
Bagging: 数据重采样 → 多模型并行 → 平均/投票
Boosting: 当前模型 → 计算错误方向 → 新弱模型 → 加权累加
记忆钩子:Bagging 模型并非统计独立;真正决定平均收益的是误差相关性 ρ,而不只是树的数量 B。
八、常见误区与追问
- 误区:Bagging 的基学习器彼此严格独立。 它们来自同一有限训练集,只能通过采样与特征随机尽量去相关。
- 误区:Boosting 只能调整错分样本权重。 AdaBoost 这样做,梯度提升则拟合损失的负梯度。
- 追问:Bagging 会降低偏差吗? 主要效果通常是降方差,但非线性聚合和训练变化也可能改变偏差。
- 追问:Boosting 一定比 Bagging 准吗? 没有跨数据集保证,噪声、调参和指标都会改变结果。
- 追问:两者能结合吗? 可在每轮训练多棵并行树或对子模型再做平均,但需明确优化目标与成本。
九、加强记忆
Bagging 用 bootstrap 等随机化并行训练基模型,再平均/投票;模型共享原始数据而非统计独立,其主要收益常是降低高方差,幅度取决于树间相关性。Boosting 串行增加新模型:AdaBoost 改变样本权重,梯度提升拟合负梯度,常有效减少欠拟合,但偏差和方差都会变化。经典随机森林多用较深树,Boosting 多用受限浅树并以学习率、采样和早停控容量;这是常用配置,不是不可违背的定律。