机器学10——集成学习
集成学习
Intro
集成学习的基本思想
定义:集成学习是一种通过结合多个模型的输出来提升整体学习性能的策略。目标是构建一个比任何一个单独模型都更强的组合模型。
核心动机:
减少误差(error rate)
多个模型的投票可以互补弱点,从而提升泛化能力。
多样性来源:
- 不同学习算法(如决策树、SVM、神经网络);
- 同一算法但不同超参数设置;
- 使用训练数据的不同子集或不同特征子集。
模型结构分类
类别 | 描述 |
---|---|
异质集成(Heterogeneous Ensemble) | 多个不同类型的学习器构成 |
同质集成(Homogeneous Ensemble) | 使用同一学习算法,不断更改数据子集进行训练(如 Bagging、Boosting) |
- Bagging: Resample training data
- Boosting: Reweight training data
举例说明
举例:使用同一训练集构建 100 棵决策树,让它们对新样本进行投票分类,最终以多数票确定类别。
这种多数投票方式可显著减少单个模型的过拟合问题,提高整体鲁棒性。
Bagging(Bootstrap Aggregating)
核心机制:通过**自助采样法(bootstrap sampling)**获得多个训练子集,并对每个子集训练一个模型。
主要步骤:
- 给定训练集 L(大小为 n);
- 重复 B 次:
- 从 L 中有放回地采样 n 个样本,生成子集 LkL_kLk;
- 使用 LkL_kLk 训练一个模型 hkh_khk;
- 使用投票(分类)或平均(回归)整合所有模型预测结果。
Bootstrap 方法解释
用于从原始样本集模拟多个训练集,从而评估模型稳定性或减少方差。
举例:
原始样本 L 有 8 个数据点,可能生成如下子集:
子集编号 | 示例数据点(重复可能) |
---|---|
L1 | 2, 7, 8, 3, 7, 6, 3, 1 |
L2 | 7, 8, 5, 6, 4, 2, 7, 1 |
L3 | 3, 6, 2, 7, 5, 6, 2, 2 |
每个子集包含原始样本的约 63.2% 的唯一样本,剩下的是重复样本。
- Bootstrap不适用于:
- Small data sets: the original sample is not a good approximation of the population
- Dirty data: outliers add variability in our estimates.
- Dependence structures (e.g., time series, spatial problems): Bootstrap is based on the assumption of independence.
Bagging 的本质
Bagging 利用多个训练集训练多个模型,然后平均它们的偏差并减少方差,从而提升整体预测效果。最终通过**投票(分类)或平均(回归)**组合结果。
Bagging 的适用场景
效果好:
- 非稳定学习器(unstable learners):
- 决策树、神经网络、回归树等;
- 特点:对训练数据的微小扰动敏感。
效果有限甚至退化:
- 稳定学习器(stable learners):
- K 最近邻、线性回归;
- 模型对训练集变化不敏感。
Bagging 总结:
- 适合高方差模型;
- 有效提升鲁棒性与泛化能力;
- 不能明显减少偏差。
Boosting:基于重加权的集成方法
Boosting 的核心思想
串行训练多个模型,让后一个模型专注于前一个模型犯错的部分。
特点:
- 每个弱学习器都依赖前一个;
- 错误样本的权重不断增加;
- 强调难以分类的样本;
- 组合所有弱模型的输出以构建强模型。
Boosting 的过程(简化示例)
- 初始化训练集 DDD,样本权重均等;
- 从中选取子集 D1D_1D1,训练第一个模型 C1C_1C1;
- 提取被 C1C_1C1 错误分类的样本,构成子集 D2D_2D2,训练 C2C_2C2;
- 选出 C1C_1C1 与 C2C_2C2 不一致预测的样本,训练 C3C_3C3;
- 最终分类由 C1,C2,C3C_1, C_2, C_3C1,C2,C3 投票决定。
这种方法能不断纠正前一阶段模型的错误,是一种“纠错机制”。
Boosting 的关键效果
- 能将多个 弱学习器(准确率略高于随机猜测)组合成一个强学习器;
- 不仅降低偏差,还可在某种程度上减少方差;
- 常用算法:AdaBoost、Gradient Boosting、XGBoost 等。
AdaBoost(Adaptive)
什么是 AdaBoost?
背景与目标
-
提出者:Yoav Freund 与 Robert Schapire 在 1995 年 EuroCOLT 会议中提出;
-
核心思想:将多个“弱分类器”(性能略好于随机)组合成一个“强分类器”(准确率接近完美);
h1(x)∈{−1,+1}h2(x)∈{−1,+1}⋮hT(x)∈{−1,+1}}HT(x)=sign(∑t=1Tαtht(x)) \left.\begin{array}{rl} h_1(x) & \in\{-1,+1\} \\ h_2(x) & \in\{-1,+1\} \\ & \vdots \\ h_T(x) & \in\{-1,+1\} \end{array}\right\} \quad H_T(x)=\operatorname{sign}\left(\sum_{t=1}^T \alpha_t h_t(x)\right) h1(x)h2(x)hT(x)∈{−1,+1}∈{−1,+1}⋮∈{−1,+1}⎭⎬⎫HT(x)=sign(t=1∑Tαtht(x)) -
关键区别于 Bagging:
- Bagging 是对训练集“重采样”;
- AdaBoost 是对样本“重新加权”。
应用场景
适用于任何二分类任务,特别是基分类器表现不稳定时(如:决策树、神经网络)。
AdaBoost 算法流程
给定训练集:
{(x1,y1),(x2,y2),…,(xm,ym)},yi∈{−1,+1}
\{(x_1, y_1), (x_2, y_2), \dots, (x_m, y_m)\}, \quad y_i \in \{-1, +1\}
{(x1,y1),(x2,y2),…,(xm,ym)},yi∈{−1,+1}
初始化样本权重分布
D1(i)=1m,i=1,2,…,m D_1(i) = \frac{1}{m}, \quad i = 1, 2, \dots, m D1(i)=m1,i=1,2,…,m
每个样本一开始拥有相等的“重要性权重”。
多轮训练(Boosting 迭代)
对每一轮 t=1,2,…,Tt = 1, 2, \dots, Tt=1,2,…,T:
Step 1:训练弱分类器
在当前分布 DtD_tDt 下,训练一个弱分类器 ht:X→{−1,+1}h_t: X \to \{-1, +1\}ht:X→{−1,+1},使加权错误最小:
εt=∑i=1mDt(i)⋅I[ht(xi)≠yi]
\varepsilon_t = \sum_{i=1}^{m} D_t(i) \cdot \mathbb{I}[h_t(x_i) \ne y_i]
εt=i=1∑mDt(i)⋅I[ht(xi)=yi]
其中 I\mathbb{I}I 是指示函数。
Step 2:计算该分类器的重要性
αt=12ln(1−εtεt) \alpha_t = \frac{1}{2} \ln \left( \frac{1 - \varepsilon_t}{\varepsilon_t} \right) αt=21ln(εt1−εt)
- 若分类器准确率高(εt\varepsilon_tεt 小),则权重大;
- 若 εt=0.5\varepsilon_t = 0.5εt=0.5,表示等于随机猜测,αt=0\alpha_t = 0αt=0。
Step 3:更新样本分布
Dt+1(i)=Dt(i)⋅exp(−αtyiht(xi))Zt D_{t+1}(i) = \frac{D_t(i) \cdot \exp\left(-\alpha_t y_i h_t(x_i)\right)}{Z_t} Dt+1(i)=ZtDt(i)⋅exp(−αtyiht(xi))
- 分类正确:yi=ht(xi)y_i = h_t(x_i)yi=ht(xi),指数为负,权重降低;
- 分类错误:yi≠ht(xi)y_i \ne h_t(x_i)yi=ht(xi),指数为正,权重升高;
- ZtZ_tZt:归一化因子,确保 Dt+1D_{t+1}Dt+1 是合法的概率分布。
最终强分类器
将所有弱分类器加权投票构建最终分类器:
HT(x)=sign(∑t=1Tαtht(x))
H_T(x) = \operatorname{sign} \left( \sum_{t=1}^{T} \alpha_t h_t(x) \right)
HT(x)=sign(t=1∑Tαtht(x))
AdaBoost 的动机与目标
- 为什么αt=12ln(1−εtεt)\alpha_t = \frac{1}{2} \ln \left( \frac{1 - \varepsilon_t}{\varepsilon_t} \right)αt=21ln(εt1−εt)?为什么Dt+1(i)=Dt(i)⋅exp(−αtyiht(xi))ZtD_{t+1}(i) = \frac{D_t(i) \cdot \exp\left(-\alpha_t y_i h_t(x_i)\right)}{Z_t}Dt+1(i)=ZtDt(i)⋅exp(−αtyiht(xi))?它们是如何得到的?
αt\alpha_tαt=?
- 为了最大化分类间隔 yH(x)yH(x)yH(x),AdaBoost 选择优化以下目标函数:
Lexp[H(x)]=Ex,y[e−yH(x)] \mathcal{L}_{\text{exp}}[H(x)] = \mathbb{E}_{x, y}\left[e^{-yH(x)}\right] Lexp[H(x)]=Ex,y[e−yH(x)]
初始化:
- 初始组合分类器:H0(x)=0H_0(x) = 0H0(x)=0
- 初始样本分布:D1(i)=1mD_1(i) = \frac{1}{m}D1(i)=m1,即每个样本权重相等。
递推构造强分类器
我们使用递推结构来构造 Ht(x)H_t(x)Ht(x):
Ht(x)=Ht−1(x)+αtht(x)
H_t(x) = H_{t-1}(x) + \alpha_t h_t(x)
Ht(x)=Ht−1(x)+αtht(x)
优化目标函数
令当前指数损失函数为:
Lt=Ex,y[e−yHt(x)]
\mathcal{L}_t = \mathbb{E}_{x, y}\left[e^{-y H_t(x)}\right]
Lt=Ex,y[e−yHt(x)]
代入递推式:
Ht(x)=Ht−1(x)+αtht(x)
H_t(x) = H_{t-1}(x) + \alpha_t h_t(x)
Ht(x)=Ht−1(x)+αtht(x)
得到:
Ex,y[e−yHt(x)]=Ex[Ey[e−yHt(x)∣x]](给定x,先求y的期望)=Ex[Ey[e−y[Ht−1(x)+αtht(x)]∣x]](带入)=Ex[Ey[e−yHt−1(x)e−yαtht(x)∣x]](将y∈{−1,+1}分别代入求和)=Ex[e−yHt−1(x)[e−αtP(y=ht(x))+eαtP(y≠ht(x))]]
\begin{aligned}
E_{x, y}\left[e^{-y H_t(x)}\right] & =E_x\left[E_y\left[e^{-y H_t(x)} \mid x\right]\right](给定x,先求y的期望) \\
& =E_x\left[E_y\left[e^{-y\left[H_{t-1}(x)+\alpha_t h_t(x)\right]} \mid x\right]\right] (带入)\\
& =E_x\left[E_y\left[e^{-y H_{t-1}(x)} e^{-y \alpha_t h_t(x)} \mid x\right]\right](将 y \in \{-1, +1\}分别代入求和) \\
& =E_x\left[e^{-y H_{t-1}(x)}\left[e^{-\alpha_t} P\left(y=h_t(x)\right)+e^{\alpha_t} P\left(y \neq h_t(x)\right)\right]\right]
\end{aligned}
Ex,y[e−yHt(x)]=Ex[Ey[e−yHt(x)∣x]](给定x,先求y的期望)=Ex[Ey[e−y[Ht−1(x)+αtht(x)]∣x]](带入)=Ex[Ey[e−yHt−1(x)e−yαtht(x)∣x]](将y∈{−1,+1}分别代入求和)=Ex[e−yHt−1(x)[e−αtP(y=ht(x))+eαtP(y=ht(x))]]
为了最小化这个损失函数,由于我们在找αt\alpha_tαt的值,那么对于整个损失函数对αt\alpha_tαt求偏导数:
Set ∂∂αtEx,y[e−yHt(x)]=0⇒Ex[e−yHt−1(x)[−e−αtP(y=ht(x))+eαtP(y≠ht(x))]]=0
\begin{aligned}
&\text { Set } \frac{\partial}{\partial \alpha_t} E_{x, y}\left[e^{-y H_t(x)}\right]=0\\
&\Rightarrow E_x\left[e^{-y H_{t-1}(x)}\left[-e^{-\alpha_t} P\left(y=h_t(x)\right)+e^{\alpha_t} P\left(y \neq h_t(x)\right)\right]\right]=0
\end{aligned}
Set ∂αt∂Ex,y[e−yHt(x)]=0⇒Ex[e−yHt−1(x)[−e−αtP(y=ht(x))+eαtP(y=ht(x))]]=0
⇒αt=12lnP(y=ht(x))P(y≠ht(x))⇒αt=12ln1−εtεtεt=P( error )≈∑i=1mDt(i)[yi≠hj(xi)] \begin{aligned} \Rightarrow \alpha_t=\frac{1}{2} \ln \frac{P\left(y=h_t(x)\right)}{P\left(y \neq h_t(x)\right)} \Rightarrow \alpha_t & =\frac{1}{2} \ln \frac{1-\varepsilon_t}{\varepsilon_t} \\ \varepsilon_t & =P(\text { error }) \approx \sum_{i=1}^m D_t(i)\left[y_i \neq h_j\left(x_i\right)\right] \end{aligned} ⇒αt=21lnP(y=ht(x))P(y=ht(x))⇒αtεt=21lnεt1−εt=P( error )≈i=1∑mDt(i)[yi=hj(xi)]
Dt+1D_{t+1}Dt+1=?
我们有:
Ex,y[e−yHt(x)]=Ex,y[e−yHt−1(x)e−αtyht(x)]
\mathbb{E}_{x,y}[e^{-y H_t(x)}] = \mathbb{E}_{x,y}[e^{-y H_{t-1}(x)} e^{-\alpha_t y h_t(x)}]
Ex,y[e−yHt(x)]=Ex,y[e−yHt−1(x)e−αtyht(x)]
对 e−αtyht(x)e^{-\alpha_t y h_t(x)}e−αtyht(x) 泰勒展开:
假设 αt\alpha_tαt 足够小,可以近似一阶或二阶泰勒展开:
e−αtyht(x)≈1−αtyht(x)+12αt2y2ht2(x)
e^{-\alpha_t y h_t(x)} \approx 1 - \alpha_t y h_t(x) + \frac{1}{2} \alpha_t^2 y^2 h_t^2(x)
e−αtyht(x)≈1−αtyht(x)+21αt2y2ht2(x)
将其代入上式:
Ex,y[e−yHt(x)]≈Ex,y[e−yHt−1(x)(1−αtyht(x)+12αt2y2ht2(x))]
\mathbb{E}_{x,y}[e^{-y H_t(x)}] \approx \mathbb{E}_{x,y}\left[e^{-y H_{t-1}(x)} \left(1 - \alpha_t y h_t(x) + \frac{1}{2} \alpha_t^2 y^2 h_t^2(x) \right) \right]
Ex,y[e−yHt(x)]≈Ex,y[e−yHt−1(x)(1−αtyht(x)+21αt2y2ht2(x))]
由于 y2=1y^2 = 1y2=1,ht2(x)=1h_t^2(x) = 1ht2(x)=1(因为 ht(x)∈{−1,+1}h_t(x) \in \{-1, +1\}ht(x)∈{−1,+1}),所以上式简化为:
Ex,y[e−yHt−1(x)(1−αtyht(x)+12αt2)]
\mathbb{E}_{x,y}\left[e^{-y H_{t-1}(x)} \left(1 - \alpha_t y h_t(x) + \frac{1}{2} \alpha_t^2 \right) \right]
Ex,y[e−yHt−1(x)(1−αtyht(x)+21αt2)]
忽略常数项 12αt2\frac{1}{2} \alpha_t^221αt2,因为它不依赖于 hth_tht,我们将目标变为:
ht=argminhEx,y[e−yHt−1(x)(−αtyh(x))]
h_t = \arg \min_h \mathbb{E}_{x,y}\left[e^{-y H_{t-1}(x)} \left( -\alpha_t y h(x) \right) \right]
ht=arghminEx,y[e−yHt−1(x)(−αtyh(x))]
可以把 αt\alpha_tαt 提出来,得到等价的:
ht=argmaxhEx,y[e−yHt−1(x)yh(x)]
h_t = \arg \max_h \mathbb{E}_{x,y}\left[ e^{-y H_{t-1}(x)} y h(x) \right]
ht=arghmaxEx,y[e−yHt−1(x)yh(x)]
将期望分解为条件期望:
ht=argmaxhEx[Ey[e−yHt−1(x)yh(x)∣x]]
h_t = \arg \max_h E_x \left[ E_y \left[ e^{-y H_{t-1}(x)} y h(x) \mid x \right] \right]
ht=arghmaxEx[Ey[e−yHt−1(x)yh(x)∣x]]
进一步写成:
ht=argmaxhEx[h(x)(e−Ht−1(x)P(y=1∣x)−eHt−1(x)P(y=−1∣x))]
h_t = \arg \max_h \mathbb{E}_x\left[ h(x) \left( e^{-H_{t-1}(x)} P(y=1|x) - e^{H_{t-1}(x)} P(y=-1|x) \right) \right]
ht=arghmaxEx[h(x)(e−Ht−1(x)P(y=1∣x)−eHt−1(x)P(y=−1∣x))]
观察可知,
ht=argmaxhEx,y∼e−yHt−1(x)P(y∣x)[yh(x)]
h_t=\arg \max _h E_{x, y \sim e^{-y H_{t-1}(x)} P(y \mid x)}[y h(x)]
ht=arghmaxEx,y∼e−yHt−1(x)P(y∣x)[yh(x)]
其中下标 Ex,y∼e−yHt−1(x)P(y∣x)\mathbb{E}_{x, y \sim e^{-y H_{t-1}(x)} P(y \mid x)}Ex,y∼e−yHt−1(x)P(y∣x) 的意思是:
在一个 经过重新加权的xy分布 上,求期望。
正常来说,我们是在数据的真实分布上做期望:
Ex,y∼P(x,y)[⋅] \mathbb{E}_{x, y \sim P(x, y)} [\cdot] Ex,y∼P(x,y)[⋅]
但在 AdaBoost 的推导中,我们采用了一个指数加权的样本分布,即:
Pt(x,y)∝e−yHt−1(x)P(x,y) P_t(x, y) \propto e^{-y H_{t-1}(x)} P(x, y) Pt(x,y)∝e−yHt−1(x)P(x,y)
或者写成条件概率形式:
Pt(y∣x)∝e−yHt−1(x)P(y∣x) P_t(y|x) \propto e^{-y H_{t-1}(x)} P(y|x) Pt(y∣x)∝e−yHt−1(x)P(y∣x)
即:每个 xxx 上的最优 h(x)h(x)h(x) 应该让:
ht(x)=sign(Ex,y∼e−yHt−1(x)P(y∣x)[y∣x])(跟y同号)
h_t(x)=\operatorname{sign}\left(E_{x, y \sim e^{-y H_{t-1}(x)} P(y \mid x)}[y \mid x]\right)(跟y同号)\\
ht(x)=sign(Ex,y∼e−yHt−1(x)P(y∣x)[y∣x])(跟y同号)
由于我们有:
P(x,y)∼e−yHt−1(x)P(y∣x)s
P(x, y) \sim e^{-y H_{t-1}(x)} P(y|x)s
P(x,y)∼e−yHt−1(x)P(y∣x)s
相当于说,我们在第 ttt 轮,不重新采样,而是重新加权样本的分布。(上面的公式就意味着对于样本分布做了调整,系数是e−yHt−1(x)e^{-y H_{t-1}(x)}e−yHt−1(x))
令:
Dt(i)=1Zt⋅e−yiHt−1(xi)=样本 (xi,yi) 的权重
D_t(i) = \frac{1}{Z_t} \cdot e^{-y_i H_{t-1}(x_i)} = \text{样本 } (x_i, y_i) \text{ 的权重}
Dt(i)=Zt1⋅e−yiHt−1(xi)=样本 (xi,yi) 的权重
那么:
Dt+1(i)=1Zt⋅e−yiHt(xi)=1Zt⋅e−yi(Ht−1(xi)+αtht(xi))=1Zt⋅e−yiHt−1(xi)⋅e−yiαtht(xi)=Dt(i)exp[−αtyiht(xi)]Zt
\begin{aligned}
D_{t+1}(i) & =\frac{1}{Z_t} \cdot e^{-y_i H_t\left(x_i\right)} \\
& =\frac{1}{Z_t} \cdot e^{-y_i\left(H_{t-1}\left(x_i\right)+\alpha_t h_t\left(x_i\right)\right)} \\
& =\frac{1}{Z_t} \cdot e^{-y_i H_{t-1}\left(x_i\right)} \cdot e^{-y_i \alpha_t h_t\left(x_i\right)} \\
& =\frac{D_t(i) \exp \left[-\alpha_t y_i h_t\left(x_i\right)\right]}{Z_t}
\end{aligned}
Dt+1(i)=Zt1⋅e−yiHt(xi)=Zt1⋅e−yi(Ht−1(xi)+αtht(xi))=Zt1⋅e−yiHt−1(xi)⋅e−yiαtht(xi)=ZtDt(i)exp[−αtyiht(xi)]
AdaBoost 的优缺点
优点
- 易实现;
- 提升弱分类器性能显著;
- 不容易过拟合(理论与经验支持);
- 有明确的优化目标函数(指数损失)。
缺点
- 对噪声较敏感;
- 分类器间串行依赖,训练难以并行化;
- 弱分类器需支持加权样本训练。