Skip to content

Chapter 11 集成学习


一、三个臭皮匠

疾旋鼬问三个朋友西瓜好不好吃:两个说好吃,一个说不好吃。少数服从多数→好吃。这就是集成学习 (Ensemble Learning) 的核心思想:用多个学习器共同决策。

为什么集成有效?

关键在于:个体学习器要"好而不同"

  • "好"——至少比随机猜好(准确率 > 50%)
  • "不同"——学习器之间要有多样性 (diversity)

极端例子: - 三个 66.6% 准确率、错误不重叠 → 集成后 100% - 三个 66.6% 准确率、总一起犯错 → 集成后 66.6% - 三个 33.3% 准确率 → 集成后 0%

误差-分歧分解

对回归任务,集成的误差可以分解为:

\[E_{\text{ensemble}} = \bar{E} - \bar{A}\]

其中 \(\bar{E}\) 是个体学习器的平均误差,\(\bar{A}\) 是平均"分歧"(多样性)。

集成误差 = 平均误差 − 多样性。多样性越大,集成效果越好。

二、Boosting

Boosting:串行训练学习器,每个新学习器重点关注前一个犯错的样本。

AdaBoost

算法流程

  1. 初始化样本权重:\(w_i = 1/m\)
  2. \(t = 1, 2, \ldots, T\)
  3. 用加权样本训练基学习器 \(h_t\)
  4. 计算加权错误率:\(\epsilon_t = \sum_{i: h_t(x^{(i)}) \neq y^{(i)}} w_i\)
  5. 计算学习器权重:\(\alpha_t = \frac{1}{2}\ln\frac{1-\epsilon_t}{\epsilon_t}\)
  6. 更新样本权重:\(w_i \leftarrow w_i \cdot \exp(-\alpha_t y^{(i)} h_t(x^{(i)}))\)
  7. 归一化权重
  8. 最终分类器:\(H(x) = \text{sign}\left(\sum_{t=1}^T \alpha_t h_t(x)\right)\)

直觉理解: - 被误分类的样本权重增加 → 下一个学习器更关注"困难"样本 - 错误率越低的学习器,权重越大 - \(\alpha_t = \frac{1}{2}\ln\frac{1-\epsilon_t}{\epsilon_t}\):当 \(\epsilon_t < 0.5\)\(\alpha_t > 0\)\(\epsilon_t \to 0\)\(\alpha_t \to \infty\)

Boosting 有效降低偏差,将泛化性能弱的分类器提升到很强的集成。

Yoav Freund 和 Robert Schapire 因 AdaBoost 获得 2003 年 Gödel Prize。

Gradient Boosting

更一般的框架:使用梯度下降优化预测模型。

\[f_t = f_{t-1} - \eta \nabla_{f_{t-1}} \mathcal{L}\]

不直接累积梯度,而是用一个弱学习器来近似负梯度:

\[h_t = \arg\min_h \sum_{i=1}^m (-g_t^{(i)} - h(x^{(i)}))^2\]

其中 \(g_t^{(i)} = \frac{\partial \ell(y^{(i)}, f_{t-1}(x^{(i)}))}{\partial f_{t-1}(x^{(i)})}\)

XGBoost

Gradient Boosting 的高效实现 [Tianqi Chen, KDD 2016]。

目标函数:

\[\mathcal{L} = \sum_{i=1}^m \ell(y^{(i)}, \hat{y}^{(i)}) + \sum_{t=1}^T \Omega(f_t)\]

其中正则项 \(\Omega(f_t) = \gamma T + \frac{1}{2}\lambda\sum_{j=1}^T w_j^2\)\(T\) 为叶结点数,\(w_j\) 为叶结点权重)。

关键创新: - 使用二阶 Taylor 近似\(\ell(y, \hat{y}) \approx \ell(y, f_{t-1}) + g \cdot f_t + \frac{1}{2}h \cdot f_t^2\) - 目标函数可以按叶结点分解,有闭式最优解 - 支持并行化、缺失值处理、正则化

其他高效实现:LightGBM (Microsoft, 2017)、CatBoost (Yandex, 2018)。

三、Bagging

Bagging (Bootstrap AGGregatING):并行训练学习器,每个学习器用不同的自助采样数据集 [Breiman, 1996]。

  1. 通过 bootstrap(有放回随机采样)从原始数据集产生 \(T\) 个子数据集
  2. 在每个子数据集上训练一个基学习器
  3. 最终预测:分类用投票法,回归用平均法

每个基学习器期望使用了初始训练集中约 63.2% 的样本(\(1 - (1-1/m)^m \approx 1 - e^{-1}\)),剩下约 36.8% 的样本可以做包外估计 (out-of-bag estimation)

Bagging 有效降低方差,对"不稳定"基学习器(如决策树、神经网络)效果显著。对"稳定"基学习器(如线性分类器、SVM)效果有限。

随机森林 (Random Forest)

以决策树为基学习器的 Bagging 变种 [Breiman, 2001]。

核心创新:随机属性选择

在每个结点划分时: 1. 先从所有 \(d\) 个属性中随机选择 \(k\) 个属性的子集 2. 再从这个子集中选最优属性进行划分

通常 \(k = \log_2 d\)\(k=1\) 时完全随机;\(k=d\) 时退化为传统决策树。

随机森林不仅通过 bootstrap 引入样本扰动,还通过随机属性选择引入属性扰动,进一步增强多样性。

随机森林可以看作一种自适应平滑器:预测本质上是落入同一终端叶结点的训练样本结果的均值。通过平均操作,系统性地对预测进行了平滑。

四、学习器结合策略

平均法

  • 简单平均\(H(x) = \frac{1}{T}\sum_{t=1}^T h_t(x)\)
  • 加权平均\(H(x) = \sum_{t=1}^T w_t h_t(x)\)\(\sum w_t = 1\)

投票法

  • 绝对多数投票:某标记票数过半才预测为该标记,否则拒绝预测
  • 相对多数投票:预测为得票最多的标记
  • 加权投票:每个学习器的票数按权重加权

注意:不同学习器的输出未必可比。需要校准 (calibration)(如 Platt 缩放、等分回归)。

Stacking (学习法)

用另一个学习器来学习如何结合初级学习器:

  1. 用初级学习器在训练集上做交叉验证,得到"新特征"
  2. 用这些新特征训练次级学习器

当训练数据很多时,Stacking 可以比简单的平均/投票更强。

五、多样性

多样性增强策略

策略 方法 适用场景
数据样本扰动 AdaBoost(重要性采样)、Bagging(自助采样) 不稳定学习器
输入属性扰动 Random Subspace 高维数据
输出表示扰动 ECOC 多分类
算法参数扰动 不同超参数 通用

选择性集成

"越多越好"不一定成立。选择性集成 (selective ensemble):从所有个体学习器中选择一部分来构建集成,通常比使用所有学习器更好。

选择时需同时考虑个体精度多样性。仅选精度最高的通常不好。


2026.06