AdaBoost
摘自李航的《统计学习方法》
一、简介
提升算法(Boosting)是一种常用的统计学习方法。在解决分类或者回归问题当中,通过训练可以得到许多若模型,可以对这些若模型进行线性组合从而得到一个更可靠的模型,从而提升模型的准确率或者精度,这就是Boosting算法。
对于弱分类器的产生以及强分类器的组合,AdaBoost的做法是:
- 提高每一轮被上一个分类器分错样本的权值(被分错的样本会受到更大的关注),从而迭代产生弱分类器。
- 加大误差小的弱分类器权值,使其在强分类器中有更大的决策作用。
二、AdaBoost算法
1 弱学习算法
(1)初始化训练数据的权值分布(对于$\omega$,左下标是第几轮的分类器,右下标是第几个样本)
$$D_{1}=(\omega_{11},...,\omega_{1i},...,\omega_{1N})$$
$$\omega_{1i}=\frac{1}{N}$$
(2)对m=1,2,...,M
(a)使用具有权值分布$D_{m}$的训练数据集学习,得到基本分类器
$$G_{m}(x):\chi \rightarrow \left \{ -1,+1 \right \}$$
(b)计算$G_{m}$在训练数据集上的分类误差率
$$e_{m}=P(G_{m}(x_{i})\neq y_{i})=\sum_{i=1}^{N}\omega_{mi}I(G_{m}(x_{i})\neq y_{i})$$
(c)计算$G_{m}(x)$的系数
$$\alpha_{m}=\frac{1}{2}log\frac{1-e_{m}}{e_{m}}$$
(d)更新训练数据集的权值分布
$$D_{m+1}=(\omega_{m+1,1},...,\omega_{m+1},i,...,\omega_{m+1,N})$$
$$w_{m+1,i}=\frac{\omega_{mi}}{Z_{m}}exp(-\alpha_{m}y_{i}G_{m} (x_{i})), i=1,2,...,N$$
$Z_{m}$是规范化因子,他使得$D_{m+1}$成为一个概率分布
$$Z_{m}=\sum_{i=1}^{N}\omega_{mi}exp(-\alpha_{m}y_{i}G_m(x_{i}))$$
(e)可以简写为
$$\omega_{m+1,i}=\begin{Bmatrix}
\frac{\omega_{mi}}{Z_{m}}e^{-\alpha_{m}}&,G_{m}(x_{i})=y_{i}\\
\frac{\omega_{mi}}{Z_{m}}e^{\alpha_{m}}&, G_{m}(x_{i})\neq y_{i}
\end{Bmatrix}$$
(3)构建基本分类器的线性组合
$$f(x)=\sum_{m=1}^{M}\alpha_{m}G_{m}(x)$$
2 AdaBoost算法的训练误差分析
AdaBoost的最终训练误差
$$\frac{1}{N}\sum_{i=1}^{N}I(G(x_{i})\neq y_{i})\leqslant \frac{1}{N}\sum_{i}^{} exp(-y_{i}f(x_{i}))=\prod_{m}^{}Z_{m}$$
二分类问题AdaBoost的训练误差界
$$\prod_{m}^{M}Z_{m}=\prod_{m=1}^{M}[2\sqrt{e_{m}(1-e_{m})}]=\prod_{m=1}^{M}\sqrt{(1-4 \gamma_{m}^{2})}\leqslant exp(-2\sum_{m=1}^{M}\gamma_{m}^{2})$$