集成学习:Bagging & Boosting
核心思想
将多个弱分类器组装成一个强分类器 。
前置知识
Bias & Variance
定义:
$ bias=\bar{f}(x) -y $,为模型的期望预测与真实值之间的差异。
$ variance=\mathbb{E}_{\mathcal{D} }[(f(x;\mathcal{D})-\bar{f}(x))^2] $,模型在数据集 \(\mathcal{D}\) 上的鲁棒性。

Bagging (bootstrap aggregating)
Bootstrap:有放回的抽样方法
算法流程:
- Bootstrap采样出来 k 份训练集(又放回抽样保证 k 份训练集相互独立)
- 在 k 个训练集上训 k 个基模型
- aggregating:
- 分类任务:投票
- 回归任务:平均值
优点:
- 可以并行
- 主要降低 Variance,对 Bias 无明显作用。适用于 High Variance & Low Bias 的模型
- 当 k 个模型相互独立:\(Var(\frac{1}{k}\sum_i^k{X_i}) = \frac{1}{k^2}Var(\sum_i^k{X_i}) = \frac{\sigma ^2}{k}\)
- \(Var(cX)=c^2Var(X)\)
- $Var(X+Y)=Var(X)+Var(Y) $ ,其中 \(X\), \(Y\) 独立
- 当 k 个模型相互独立:\(Var(\frac{1}{k}\sum_i^k{X_i}) = \frac{1}{k^2}Var(\sum_i^k{X_i}) = \frac{\sigma ^2}{k}\)
算法代表
随机森林 = Bagging + 决策树
Boosting
算法流程:
- 每轮迭代:
- 针对上轮基模型结果:提高分错样本的权重,降低分对样本的权重
- 在新样本权重上训本轮基模型
- 线性组合所有基模型
算法优点:
1、序贯式集成方法(Sequential Ensemble)。每轮迭代生成的基模型,主要提升前一代基模型表现不好的地方。
2、不断迭代弱分类器,从而降低 Bias。适用于 Low Variance & High Bias 的模型
算法代表
AdaBoost (Adaptive Boosting)
算法:
- 初始化训练集权重分布值
- while
- 在当前权重上训练基模型 \(G_m(X)\)
- 计算该模型权重 \(a_m\)(模型预测误差越小,权重越大)
- 更新训练集权重(依据分类效果,分的差的权重高)
- 加权各基模型,得到最终强分类器 \(f(X)=\sum_m^M{a_mG_m(X)}\)
正则化/步长 : \(v\)
\(v\) 越小,需要迭代更多个基模型。
\(f_m(X)=f_{m-1}+ v a_mG_m(X)\)
通常用步长和最大迭代次数来决定拟合效果
GBDT(Gradient Boosting)
GBDT算法基树采用CART回归树
树与树之间的Boosting逻辑是:新树拟合的目标是上一轮目标函数负梯度的值
当目标函数是 square loss 时,拟合目标正好是就是残差(其他损失函数不一定)
XGBoost
相对于GBDT的优化:
- 基分类器不止CART回归树,还支持线性分类器
- 对代价函数泰勒展开,新树拟合的目标用到了一阶导和二阶导
- 代价函数中加入正则项,使学习出来的模型更加简单,防止过拟合,这也是xgboost优于传统GBDT的一个特性
总结
- Adaboost 与 GBDT 两者 boosting 的不同策略是两者的本质区别
- AdaBoost用错分数据点来识别问题,通过调整错分数据点的权重来改进模型
- Adaboost强调Adaptive(自适应),通过不断修改样本权重(增大分错样本权重,降低分对样本权重),不断加入弱分类器进行boosting
- GDBT通过负梯度来识别问题,通过计算负梯度来改进模型
- GBDT 则是在确定损失函数后,本轮 cart 树的拟合目标就是沿着损失函数相对于前一轮组合树模型的负梯度方向进行拟合,也就是希望最快速度地最小化预测值与真实值之间的差异
- AdaBoost用错分数据点来识别问题,通过调整错分数据点的权重来改进模型
提升树:每个基模型拟合上一个模型的残差
Bagging,Boosting二者之间的区别
1)样本选择:
Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。
Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。
2)样例权重:
Bagging:使用均匀取样,每个样例的权重相等
Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大。
3)预测函数:
Bagging:所有预测函数的权重相等。
Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。
4)并行计算:
Bagging:可以并行生成
Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。