本文是周志华《机器学习》(西瓜书)第8章 集成学习(Ensemble Learning)的学习笔记,涵盖本章所有核心知识点,配有通俗类比与公式推导。

1个体与集成

集成学习通过投票法(分类)或平均法(回归)将多个”基学习器”组合起来。

集成有效的必要条件

  • 个体学习器要有一定的**”准确性”**(至少比随机猜测好)
  • 个体学习器之间要**”多样性”**(犯不同的错误)

误差-分歧分解(直观版本):

📐 公式

E=EˉAˉ E = \bar{E} - \bar{A}

其中 EE 是集成泛化误差,Eˉ\bar{E} 是个体泛化误差的加权平均,Aˉ\bar{A}分歧(个体之间有多不一致)。分歧越大,集成效果越好。

学习器1准确率 75% 学习器2准确率 75% 学习器3准确率 75% 集成后 准确率 90%+ 只要错误不重叠,多数投票就能纠错!

🍉 通俗类比

三个独立考官各自有 75% 准确率,但他们犯错的时候不一样。当一个人判断错误,另外两个很可能判断正确,多数投票后错误就被纠正了。这就是”好而不同”的力量。

两大范式

范式 个体关系 代表算法 能否并行
Boosting 串行、强依赖 AdaBoost, GBDT, XGBoost
Bagging 并行、独立 随机森林

2Boosting

Boosting 的核心思想:串行训练,每个新学习器致力于修正前一个学习器的错误。代表算法是 AdaBoost

算法:AdaBoost
输入:训练集 D,基学习算法 L,迭代次数 T

  1. 初始化样本权重:w_i = 1/m
  2. for t = 1..T:
    (a) 用分布 D_t 训练基学习器 h_t
    (b) 计算 h_t 的误差:ε_t = Σ_i w_i · I(h_t(x_i)≠y_i)
    (c) 若 ε_t > 0.5,停止(太差,放弃)
    (d) 计算 h_t 的权重:α_t = (1/2)·ln((1-ε_t)/ε_t)
    (e) 更新样本权重:w_i ← w_i · exp(-α_t·y_i·h_t(x_i)),再归一化
  3. 输出:H(x) = sign(Σ_t α_t · h_t(x))

关键公式解读

  • αt=12ln1εtεt\alpha_t = \frac{1}{2}\ln\frac{1-\varepsilon_t}{\varepsilon_t}:误差越小,该学习器的**投票权重越大**
  • 权重更新:错分的样本权重乘 exp(αt)\exp(\alpha_t) 放大,正确的乘 exp(αt)\exp(-\alpha_t) 缩小
  • εt>0.5\varepsilon_t > 0.5αt<0\alpha_t < 0,学习器反向投票——说明比随机猜还差,不如取反

🍉 通俗类比

Boosting 像开车教练的迭代训练。第一圈全部学员一起开,教练把每个人犯的错记下来。第二圈时增加了出错学员的练车时间(提升错分样本的权重),第三圈再针对性地练,直到每个学员都能把握好重点路段。

📌 核心定义

AdaBoost 的指数损失函数exp(HD)=ExD[ef(x)H(x)]\ell_{\exp}(H \mid D) = \mathbb{E}_{\boldsymbol{x}\sim D}[e^{-f(\boldsymbol{x})H(\boldsymbol{x})}]。可以证明 AdaBoost 正是该损失函数下的前向分步加法模型。

3Bagging 与随机森林

Bagging(Bootstrap Aggregating)

并行训练 TT 个学习器,每个用自助采样法(有放回随机采样)从原始数据中抽取一个训练集(约含 63.2% 的样本),最终用投票法或平均法结合。

算法:Bagging
for t = 1..T:
从 D 中自助采样得到 D_t(每个 D_t 与 D 同大小)
用 D_t 训练基学习器 h_t
输出:H(x) = arg max_y Σ_t I(h_t(x)=y) // 投票

随机森林(Random Forest)

在 Bagging 基础上引入属性扰动:每个节点划分时,先从 dd 个属性中随机选 kk,再在这 kk 个中选最优划分属性。一般 k=log2dk = \log_2 d

Bagging 随机森林
样本扰动 ✓ 自助采样 ✓ 自助采样
属性扰动 ✓ 随机选 k 个属性
多样性来源 仅样本 样本 + 属性

🍉 通俗类比

随机森林就像一群互相不沟通的专家,每人只随机看一部分信息就做出判断。虽然每个专家信息不全,但正因为看的信息不一样,他们不会犯同样的错误,最终投票结果反而比一个全量信息的专家更稳健。

💡 技巧提示

OOB 估计:每个基学习器只用约 63.2% 的数据训练,剩下约 36.8% 是”袋外样本”(out-of-bag)。用这些袋外样本评估该学习器的性能,汇总后可以作为集成泛化误差的无偏估计——不需要额外划分验证集!

4结合策略

平均法(回归任务)

简单平均 H(x)=1Ti=1Thi(x)H(x) = \frac{1}{T}\sum_{i=1}^T h_i(x)
加权平均 H(x)=i=1Twihi(x),  wi=1H(x) = \sum_{i=1}^T w_i h_i(x),\;\sum w_i = 1

投票法(分类任务)

绝对多数投票 得票过半才输出,否则拒绝预测
相对多数投票 得票最多就输出(必有结果)
加权投票 每个学习器有不同的投票权重

学习法(Stacking)

把个体学习器的输出作为新特征,训练一个次级学习器(元学习器)来做最终决策。

基学习器1 基学习器2 合并为新的训练集(每个学习器输出作为特征) 次级学习器(最终决策)

⚠️ 注意事项

Stacking 的初级训练要用交叉验证/留出法产生次级训练集,不能直接用初级训练集的预测结果,否则容易过拟合。

5多样性

多样性增强方法

策略 具体做法
数据样本扰动 自助采样(Bagging)、序列采样(Boosting)
输入属性扰动 随机子空间(随机森林中的属性随机选择)
输出表示扰动 翻转部分样本标记、输出调制(ECOC 编码)
算法参数扰动 不同超参数的同种算法、不同初始化的神经网络

多样性度量

对于两个分类器 hi,hjh_i, h_j,定义:

hj=+1h_j=+1 hj=1h_j=-1
hi=+1h_i=+1 aa bb
hi=1h_i=-1 cc dd

然后可以计算不合度量相关系数Q-统计量等。如相关系数 ρij=adbc(a+b)(a+c)(c+d)(b+d)\rho_{ij} = \frac{ad-bc}{\sqrt{(a+b)(a+c)(c+d)(b+d)} }ρ=0\rho = 0 表示独立,增加多样性。

6本章总结

集成学习两大流派 Boosting(串行) AdaBoost → GBDT → XGBoost → LightGBM Bagging(并行) Bagging → 随机森林 共同目标:好而不同(准确 + 多样) 平均法 / 投票法 学习法 (Stacking) 多样性度量

📝 考试高频考点

  • 集成有效的两个条件:准确性 + 多样性
  • AdaBoost 的权重更新公式:错分样本权重放大,正确样本权重缩小
  • Bagging vs Boosting:并行/串行、独立/依赖、方差/偏差
  • 随机森林 vs Bagging:多了属性随机扰动
  • OOB 估计的优点(无偏估计,不需要验证集)
  • Stacking 中交叉验证的必要性
  • 偏差-方差角度:Bagging 主要降方差,Boosting 主要降偏差

📌 核心定义

一句话总结:集成学习 = 集合多个”好用且不犯同样错误”的学习器。Boosting 串行修正错误(降偏差),Bagging 并行取平均/投票(降方差)。工业界的 XGBoost/LightGBM 本质都是这章思想的工程化实现。

范式 核心手法 降低什么 代表
Boosting 重赋权(关注难样本) 偏差 AdaBoost, GBDT
Bagging 自助采样 + 投票 方差 随机森林
Stacking 学习如何组合 兼有