HolyShine

目前集成学习(Ensemble Learning) 分为两类:

  • 个体学习器间存在强依赖关系、必须串行化生成的序列化方法:Boosting
  • 个体学习器间不存在强依赖关系,可同时生成的并行化方法:Bagging 和 随机森林

这里先来讲下代表Boosting家族的AdaBoost。
Boosting 是一族可以将弱学习器提升为强学习器的算法。

算法机制

从初始训练集训练一个基学习器(Base Learner) ,根据基学习器的表现对训练样本分布进行调整,对做错的样本赋予更大的权重,基于调整后的样本分布训练下一个基学习器,直到基学习器的数目达到指定的值 \(T\),,同时进行学习器权重调整。

1. AdaBoost分类算法流程

假设我们有:

  • 训练集 \(D=\{(x_1, y_1), (x_2, y_2), \cdots, (x_m, y_m)\}\)

  • 训练轮数(学习器数目): \(T\)

  • 基学习器 \(h_t(x), t=\{1,2,3,\cdots,T\}\) ,对应于学习算法

  • 基学习器权重 \(\alpha_t\)

  • 样本分布 \(\mathcal D\), 训练集在第 \(t\) 个分类器上的样本权重为:
    \[ \notag \mathcal{D}_t= (w_{t1},w_{t2},\cdots, w_{tm}) \]

针对以上条件,AdaBoost的算法流程如下:
\[ \begin{align} &\mathcal D_1 =1/m\\ &\text{for }t = 1,2, \cdots,T \text{ do}\notag \\ &\ \ \ \ e_t = P(h_t(x_i)\neq y_i) = \sum_{i=1}^mw_{ti}I(h_t(x_i)\neq y_i)\\ &\ \ \ \ \alpha_t = \frac{1}{2}\ln(\frac{1-e_t}{e_t})\\ &\ \ \ \ \text{update distribution }D_{t+1}: \notag \\ &\ \ \ \ \ \ \ \ w_{t+1,i} = \frac{w_{t,i}}{Z_t}\times\exp(-\alpha_ty_ih_t(x_i)) \text{ for } i=1,2,\cdots,m\\ &\text{end for} \notag \end{align} \]
根据这个算法,我们一步步讲AdaBoost的流程。

(1) 初始化权重

对于每个样本,我们令其的初始化权重均为 \(\frac{1}{m}\)

对于指定的基学习器数目 \(T\),我们知道Boosting 是串行化训练,每一个基学习器都是基于上一个已训练的基学习器继续训练得到的,所以接下来要做 \(T\) 个循环

(2) 获得集合分类误差

以二分类 \(\{+1,-1\}\)为例(多分类是二分类的推广),第 \(t\) 个基学习器在训练集上的加权误差即如公式(2)所示。

(3) 基学习器获得权重系数

由公式(3)可以得到当前基学习器的权重系数。

由公式可以知道,误差率越高,则当前基学习器的权重系数越小。至于为什么使用这个系数公式,我们放到Adaboost的损失函数优化的时候再讲。

(4) 更新样本权重

单独把公式(4)拿出来讲:
\[ \begin{align} w_{t+1,i} = \frac{w_{t,i}}{Z_t}\times\exp(-\alpha_ty_ih_t(x_i)) \end{align} \]
其中 \(Z_t\) 是归一化因子:
\[ \begin{align} Z_t = \sum_{i=1}^mw_{t,i}\times \exp(-\alpha_ty_ih_t(x_i)) \end{align} \]
可以看到,如果第 \(i\) 个样本分类错误,则 有:
\[ \begin{align} y_ih_t(x_i)<0 & \Rightarrow \exp(-\alpha_i y_ih_t(x_i))>1\\ &\Rightarrow w_{t+1,i}>w_{t,i} \end{align} \]
则错误分类的样本会在下一个基学习器的训练中,在数据中占有更高的比重。具体为什么用这个权重更新公式,还是放到损失函数优化的时候讲。

(5) 最终的分类策略

最终的强分类器采用了加权平均:
\[ \begin{align} H(x)=\text{sign}(\sum_{t=1}^T\alpha_th_t(x)) \end{align} \]

2. AdaBoost损失函数

AdaBoost使用指数损失函数:
\[ \begin{align} \ell _{\exp}(H|\mathcal D)=\sum_{i=1}^m\exp (-y_iH_T(x)) \end{align} \]
通过最小化这个损失函数,我们可以推导出基学习器的权重系数更新策略和样本权重更新策略。至于为什么最小化指数函数误差就可以最小化分类误差,将在最后推导。

基学习器权重更新策略推导

我们知道,\(t\) 轮训练获得的基学习器是由上一个轮的学习器所得,即有:
\[ \begin{align} H_t(x)=H_{t-1}(x)+\alpha_th_t(x) \end{align} \]
最小化 \(t\) 轮学习后得到的强分类器损失:
\[ \begin{align} (\alpha_t, h_t(x) )=\arg\min\limits_{\alpha, h}\sum_{i=1}^m\exp(-y_i(H_{t-1}(x)+\alpha_th_t(x))) \end{align} \]
我们令 \(w_{ti}’=\exp(-y_iH_{t-1}(x))\),显然,它的值不依赖于 $\alpha_t $ 和 \(h_t(x)\), 仅仅依赖于 \(H_{t-1}(x)\), 随着迭代改变。

带回式子(12),得
\[ \begin{align} (\alpha_t, h_t(x) )=\arg\min\limits_{\alpha, h}\sum_{i=1}^mw_{ti}'\exp(-y_i\alpha_th_t(x)) \end{align} \]
为了极小化这个损失函数,我们需要极小化第 \(t\) 个分类器误差。即:
\[ \begin{align} h_t(x)=\arg\min \limits_{h}\sum_{i=1}^mw_{ti}'I(y_i\neq h(x_i)) \end{align} \]
将(14)带入损失函数:
\[ \begin{align} \notag \sum_{i=1}^mw_{ti}'\exp(-y_i\alpha_th_t(x))&=\sum_{y_i=h_t(x_i)}w_{ti}'e^{-\alpha}+\sum_{y_i\neq h_t(x_i)}w_{ti}'e^\alpha\\ &=\sum_{i=1}^mw_{ti}'e^{-\alpha}-\sum_{y_i\neq h_t(x_i)}w_{ti}'e^{-\alpha}+\sum_{y_i\neq h_t(x_i)}w_{ti}'e^\alpha\\ \notag &=(e^\alpha-e^{-\alpha})\sum_{y_i\neq h_t(x_i)}w_{ti}'+e^{-\alpha}\sum_{i=1}^m w_{ti}' \end{align} \]
对于(15)求偏导,令其为0,得:
\[ \begin{align} (e^\alpha+e^{-\alpha})\sum_{y_i\neq h_t(x_i)}w_{ti}'-e^{-\alpha}\sum_{i=1}^m w_{ti}'=0 \end{align} \]
在基学习器的迭代中,每轮的分类误差为:
\[ \begin{align} e_t = \sum_i^m w_{ti}I(y_i\neq h_t(x_i))=\sum_{y_i\neq h_t(x_i)}w_{ij} \end{align} \]

注意到 :
\[ \begin{align} e_t = \frac{ \sum_i^m w_{ti}I(y_i\neq h_t(x_i))}{\sum_{i=1}^m w_{ti}'} \end{align} \]
则,式(16)变为:
\[ \begin{align} (e^{\alpha_t}+e^{-\alpha_t})e_t - e^{-\alpha_t}=0 \end{align} \]

解得:
\[ \begin{align} \alpha_t = \frac{1}{2}\ln \left( \frac{1-e_t}{e_t}\right) \end{align} \]

样本权重更新策略推导

根据上一节自定义的 \(w_{ti}'\),我们知道它与 权重参数只差一个归一化因子 \(Z_t\)。有:
\[ \begin{align} w_{t+1,i}'&=\exp (-y_iH_t(x))\\ &=\exp(-y_i(H_{t-1}(x)+\alpha_th_t(x)))\\ &=\exp(-y_iH_{t-1}(x)·\exp(-y_i\alpha_th_t(x))\\ &=w_{t,i}'·\exp(-y_i\alpha_th_t(x)) \end{align} \]

最小化指数函数误差=最小化分类误差?

最后讲下为什么最小化指数函数误差=最小化分类误差。

回顾一下指数函数误差。
\[ \begin{align} \ell _{\exp}(H|\mathcal D)=\sum_{i=1}^m\exp (-y_iH_T(x)) \end{align} \]
为了最小化误差,我们对 \(H(x)\)求偏导:
\[ \nabla H(x)=e^{H(x)}P(y=-1|x)-e^{-H(x)}P(y=+1|x) \]
\(\nabla H(x)=0\), 解得:
\[ \begin{align} H(x)&=\frac{1}{2}\ln\frac{P(y=+1|x)}{P(y=-1|x)} \end{align} \]
则最终强分类器:

\[ \begin{align} \text{sign}(H(x))&=\text{sign}\left(\frac{1}{2}\ln\frac{P(y=+1|x)}{P(y=-1|x)} \right)\\ &=\mathop{\text{arg max}} \limits_{y\in\{+1,-1\}}P(y|x) \end{align} \]
这意味着最终强分类器达到了贝叶斯最优错误率。换言之,若指数函数最小化,则分类错误率也最小化。

参考资料

相关文章: