Chapter 11 集成学习
一、三个臭皮匠
疾旋鼬问三个朋友西瓜好不好吃:两个说好吃,一个说不好吃。少数服从多数→好吃。这就是集成学习 (Ensemble Learning) 的核心思想:用多个学习器共同决策。
为什么集成有效?
关键在于:个体学习器要"好而不同"。
- "好"——至少比随机猜好(准确率 > 50%)
- "不同"——学习器之间要有多样性 (diversity)
极端例子: - 三个 66.6% 准确率、错误不重叠 → 集成后 100% - 三个 66.6% 准确率、总一起犯错 → 集成后 66.6% - 三个 33.3% 准确率 → 集成后 0%
误差-分歧分解
对回归任务,集成的误差可以分解为:
其中 \(\bar{E}\) 是个体学习器的平均误差,\(\bar{A}\) 是平均"分歧"(多样性)。
集成误差 = 平均误差 − 多样性。多样性越大,集成效果越好。
二、Boosting
Boosting:串行训练学习器,每个新学习器重点关注前一个犯错的样本。
AdaBoost
算法流程:
- 初始化样本权重:\(w_i = 1/m\)
- 对 \(t = 1, 2, \ldots, T\):
- 用加权样本训练基学习器 \(h_t\)
- 计算加权错误率:\(\epsilon_t = \sum_{i: h_t(x^{(i)}) \neq y^{(i)}} w_i\)
- 计算学习器权重:\(\alpha_t = \frac{1}{2}\ln\frac{1-\epsilon_t}{\epsilon_t}\)
- 更新样本权重:\(w_i \leftarrow w_i \cdot \exp(-\alpha_t y^{(i)} h_t(x^{(i)}))\)
- 归一化权重
- 最终分类器:\(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
更一般的框架:使用梯度下降优化预测模型。
不直接累积梯度,而是用一个弱学习器来近似负梯度:
其中 \(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]。
目标函数:
其中正则项 \(\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]。
- 通过 bootstrap(有放回随机采样)从原始数据集产生 \(T\) 个子数据集
- 在每个子数据集上训练一个基学习器
- 最终预测:分类用投票法,回归用平均法
每个基学习器期望使用了初始训练集中约 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 (学习法)
用另一个学习器来学习如何结合初级学习器:
- 用初级学习器在训练集上做交叉验证,得到"新特征"
- 用这些新特征训练次级学习器
当训练数据很多时,Stacking 可以比简单的平均/投票更强。
五、多样性
多样性增强策略
| 策略 | 方法 | 适用场景 |
|---|---|---|
| 数据样本扰动 | AdaBoost(重要性采样)、Bagging(自助采样) | 不稳定学习器 |
| 输入属性扰动 | Random Subspace | 高维数据 |
| 输出表示扰动 | ECOC | 多分类 |
| 算法参数扰动 | 不同超参数 | 通用 |
选择性集成
"越多越好"不一定成立。选择性集成 (selective ensemble):从所有个体学习器中选择一部分来构建集成,通常比使用所有学习器更好。
选择时需同时考虑个体精度和多样性。仅选精度最高的通常不好。
2026.06