Bagging 和 Boosting 有什么区别?
简化版
Bagging 和 Boosting 是集成学习的两大流派。Bagging(如随机森林):并行训练多个条件上可独立拟合、但统计误差通常相关的基学习器,每个用自助采样的不同数据子集,预测时平等地投票/平均;它主要降低方差(多个高方差模型平均后方差骤降),常搭配低偏差、高方差且不稳定的模型(如较深树)。Boosting(如 AdaBoost、GBDT):串行训练,每个新模型专门纠正前面模型的错误(加大错分样本权重 / 拟合残差),预测时加权组合;它主要降低偏差(把弱模型逐步叠加成强模型),常用受限浅树控制每轮步幅,但容量仍需验证。记忆锚点:Bagging 并行降方差、Boosting 串行降偏差。
详细版
核心对比:
| 维度 | Bagging | Boosting |
|---|---|---|
| 训练方式 | 并行(可同时训练) | 串行(依赖前一个) |
| 基学习器关系 | 可并行拟合,误差通常相关 | 后者依赖当前整体模型 |
| 数据 | 自助采样(bootstrap)不同子集 | 全量,调整样本权重/拟合残差 |
| 样本权重 | 相等 | 动态调整(错分样本加权) |
| 基学习器权重 | 相等(平权投票) | 不等(表现好的权重大) |
| 主要降低 | 方差 | 偏差 |
| 基学习器倾向 | 强(低偏差高方差,如深树) | 弱(高偏差低方差,如浅树) |
| 过拟合风险 | 低(平均抗过拟合) | 较高(过度纠错会过拟合噪声) |
| 代表 | 随机森林 | AdaBoost、GBDT、XGBoost |
为什么 Bagging 降方差、Boosting 降偏差(核心):
- Bagging:若误差方差为 σ²、两两相关为 ρ,B 个模型平均的方差约为
ρσ²+(1-ρ)σ²/B;只有理想独立时才是 σ²/B,偏差也并非数学上永远不变。 - Boosting:每轮拟合前面的残差/错误,不断减小训练误差(偏差) → 治高偏差(欠拟合)。
完整版教学
一、两条不同的集成路线
集成学习要让多个基学习器「好而不同」,但制造多样性和组合的方式有两种截然不同的路线:
- Bagging:让基学习器各自独立地在不同数据子集上学,然后平权综合——靠「独立 + 平均」降方差。
- Boosting:让基学习器接力式地一个纠正一个的错误,然后加权综合——靠「逐步纠错」降偏差。
理解它们的区别,关键抓住训练方式(并行/串行)和主攻目标(方差/偏差) 两条。
二者不能只按“并行/串行”背诵,还要说明统计目标:对高方差基学习器取平均,方差下降幅度受模型间相关系数限制;Boosting 每轮沿当前组合模型的错误或损失梯度新增学习器,主要改善偏差。实际模型也会交叉使用技巧,例如随机梯度提升同时做行采样,因此分类依据是训练依赖和组合机制,而不是是否出现采样。
二、Bagging:并行 + 自助采样 + 平权平均
Bagging = Bootstrap Aggregating(自助采样聚合),流程:
- 从训练集有放回地随机抽样(bootstrap),得到多个大小相同但内容不同的子集。
- 每个子集独立训练一个基学习器(互不影响,可并行)。
- 预测时平权组合:分类多数投票、回归取平均。
关键特征:
- 基学习器可在给定重采样数据后并行拟合、聚合时地位平等;因为共享原始训练集,它们的误差通常并不独立。
- 每个只看到部分(约 63%)样本(自助采样的性质),制造了数据层面的多样性。
- 随机森林在此基础上再加「每次分裂随机选特征子集」,进一步增加多样性。
三、Boosting:串行 + 逐步纠错 + 加权组合
Boosting 流程完全不同:
- 先训练一个基学习器。
- 看它在哪些样本上错了,让下一个基学习器重点关注这些错样本(AdaBoost 提高错分样本权重;GBDT 让下一棵树拟合当前的残差/负梯度)。
- 串行训练一串这样「后者补前者短板」的模型。
- 预测时加权组合:表现好的基学习器权重更大。
关键特征:
- 基学习器串行、有依赖(后一个依赖前一个的结果,不能并行)。
- 每轮聚焦难样本,逐步把整体误差压下来。
四、核心区别:为什么 Bagging 降方差、Boosting 降偏差
这是本题的重点,也是面试必答。
Bagging 降方差:
- 假设有 n 个近似独立、方差都是 σ² 的模型,把它们平均,平均值的方差约为 σ²/n——方差随模型数下降,而偏差(各模型的平均偏离)基本不变。
- 所以 Bagging 特别适合驯服高方差、低偏差的模型(如充分生长、不剪枝的深决策树):单棵深树方差大、易过拟合,一平均方差就压下去了。基学习器越强(越低偏差)越好,方差交给平均去消。
Boosting 降偏差:
- 每一轮都在拟合前面模型没学好的部分(残差/错误),相当于不断给整体模型「打补丁」,训练误差(偏差)持续下降——把一堆欠拟合的弱模型叠加成一个强模型。
- 所以 Boosting 适合提升高偏差、低方差的弱模型(如很浅的树、决策树桩):单个弱、欠拟合,Boosting 把它们串起来逐步降偏差。基学习器要弱,太强会一上来就过拟合。
对照锚点:Bagging 用「独立平均」压方差(配强模型),Boosting 用「串行纠错」压偏差(配弱模型)。
五、其他重要差异
- 过拟合风险:Bagging 的平均天然抗过拟合,固定随机森林生成机制下增加树数通常使预测趋于稳定,但有限验证指标仍会波动,且不能修复有偏数据或错误设定;Boosting 会不断降训练误差,如果轮数太多、学习率不当,可能过度拟合噪声(把错样本里的噪声也硬学),需要早停、学习率、正则控制。
- 对噪声/离群点:Boosting 因为聚焦错样本,对噪声更敏感(噪声样本一直被加权关注);Bagging 相对鲁棒。
- 并行性:Bagging 天然可并行(训练快);Boosting 串行(较慢,但 XGBoost/LightGBM 在单棵树内部做了并行优化)。
- 权重:Bagging 基学习器平权;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:并行训练多个独立基学习器(各用自助采样子集)、平权投票/平均,主要降方差——n 个近似独立模型平均后方差约降到 1/n,所以配强模型(深树)、抗过拟合,代表随机森林;Boosting:串行训练、每个新模型纠正前面的错误(AdaBoost 加权错样本 / GBDT 拟合残差)、加权组合,主要降偏差——逐步把欠拟合弱模型叠成强模型,所以配弱模型(浅树)、对噪声更敏感、轮数多易过拟合,代表 AdaBoost/GBDT/XGBoost。记忆锚点:Bagging 并行、独立平均、降方差、用强模型;Boosting 串行、接力纠错、降偏差、用弱模型。