集成学习通过构建并结合多个学习器来完成学习任务,常可获得比单一学习器显著优越的泛化性能。本章讨论Boosting、Bagging两大流派、随机森林、结合策略与多样性度量。
第八章 集成学习
个体与集成
核心直觉:多个弱学习器互补,”三个臭皮匠顶个诸葛亮”。但要集成有效,个体学习器必须”好而不同”——既要有一定准确性,又要有多样性。
两类集成方法:
- 并行化(Bagging派):个体学习器独立生成,降低方差
- 串行化(Boosting派):个体学习器依赖生成,降低偏差
经验法则:Bagging适合高方差模型(如深度决策树),Boosting适合高偏差模型(如浅层决策树)。这也是为什么两者都以决策树为基学习器——决策树的方差/偏差可通过深度灵活调整。
Boosting
Boosting将弱学习器提升为强学习器。核心机制:串行训练,每轮根据前一轮的表现调整训练样本的分布,使后续学习器聚焦于前面的错误。
AdaBoost
最经典的Boosting算法:
- 初始化样本权重:$w_i = 1/m$
- 对 $t = 1, \dots, 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)$
AdaBoost的指数损失函数:$\ell_{\exp}(H|D) = \mathbb{E}_{x\sim D}[e^{-yH(x)}]$。可以证明,AdaBoost每步优化的是指数损失,且最终模型等价于对数几率回归的加性模型。
GBDT (梯度提升决策树)
AdaBoost通过调整样本权重间接优化损失,GBDT更直接——每棵树直接拟合上一轮的负梯度(残差):
第 $t$ 棵回归树拟合 $\{(x_i, r_{ti})\}$,最终模型为所有树输出的累加。
XGBoost与LightGBM
- XGBoost:对损失函数做二阶泰勒展开(用到Hessian信息)+ 显式正则化项控制复杂度
- LightGBM:基于直方图的决策树算法 + 叶子优先生长策略(Leaf-wise),训练更快、内存更省
Bagging与随机森林
Bagging (Bootstrap Aggregating)
自助采样产生 $T$ 个含 $m$ 个样本的训练集 → 训练 $T$ 个基学习器 → 分类投票 / 回归平均。
每个基学习器仅用到约63.2%的原始数据,剩下36.8%作为包外估计 (OOB) 用于泛化评估。
Bagging的核心价值在于降低方差,尤其适合容易受数据扰动影响的模型(如未剪枝决策树)。对于稳定模型(如KNN、朴素贝叶斯),Bagging提升有限。
随机森林 (Random Forest)
随机森林 = Bagging + 属性随机选择:
- 传统决策树:从全部 $d$ 个属性中选最优划分
- 随机森林:先从 $d$ 个属性中随机选 $k$ 个,再从这 $k$ 个中选最优划分
- 推荐 $k = \log_2 d$(分类)或 $k = \sqrt{d}$
双重随机性 = 样本扰动(自助采样)+ 属性扰动(随机子集)→ 多样性极大化,泛化能力远超单棵决策树。
结合策略
| 策略 | 方法 | 适用场景 |
|---|---|---|
| 平均法 | 简单平均 / 加权平均 | 回归任务 |
| 投票法 | 绝对多数 / 相对多数 / 加权投票 | 分类任务 |
| 学习法 (Stacking) | 用次级学习器结合初级学习器的输出 | 异构模型组合 |
Stacking的精妙之处:初级学习器的输出(类别概率)成为次级学习器的特征。训练次级学习器时,必须用初级学习器从未见过的数据,否则过拟合风险极高。标准做法是用交叉验证生成”干净”的次级训练数据。
多样性
误差-分歧分解:集成泛化误差 = 个体平均误差 − 平均分歧($E = \bar{E} - \bar{A}$)。多样性越大,集成提升越大。
多样性度量方法:
- 不合度量:统计基学习器预测不一致的比例
- 相关系数:两两学习器输出的皮尔逊相关系数
- $\kappa$ 统计量:去除随机一致后的分类一致性
增强多样性的常用手段:数据样本扰动、输入属性扰动、输出表示扰动、算法参数扰动。