李航《统计学习方法》
https://www.cnblogs.com/pinard/p/6133937.html
周志华《机器学习》
集成学习可以分为两大类:Bagging(Bootstrap aggregation) 和 Boosting。前者是并行的,后者是串行的。Boosting主要关注降低偏差,Bagging主要关注降低方差,因此Bagging在不剪枝决策树,神经网络等易受样本扰动的学习器上效果更为明显。在PAC学习的框架下,一个概念是强可学习的充分必要条件是这个概念是弱可学习的,也就意味着,我们可以将弱学习算法提升为强学习算法。关于提升的方法有很多,大多数的提升算法都是改变训练数据的权值分布,针对不同的训练数据权值分布调用弱学习算法学习一系列弱分类器。
这里我们讲述AdaBoost算法(Adaptive boosting algorithm)。
AdaBoost是Boosting族算法最著名的代表。AdaBoost提高前一轮被分错的样本的权值,降低前一轮被分正确的样本的权值,送到下一个分类器进行训练。最后将各个分类器加权多数表决,即赋予分类误差率越小的分类器更大的权值,使其在表决时话语权更大。AdaBoost最本质的性质是它能在学习过程中不断减少训练误差。
下面谈论的是AdaBoost的二分类问题,类别标签为{1,-1}。
过程如下:
- 初始化训练样本权值分布, w 1 i = 1 / N w_{1i}= 1/N w1i=1/N
- 根据样本权值和样本数据训练出分类器 h t h_t ht
- 使用样本权值计算出分类器 h t h_t ht的分类误差率 e t = ∑ w t i I ( h t ( x i ) ≠ y i ) e_t = \sum w_{ti}I(h_t(x_i) \neq y_i) et=∑wtiI(ht(xi)̸=yi),即分类误差率是被分错样本的权值之和
- 根据分类误差率计算分类器 h t h_t ht的权重 α t = 1 2 l n 1 − e t e t \alpha_t=\frac{1}{2}ln\frac{1-e_t}{e_t} αt=21lnet1−et
- 更新样本权值, w t + 1 , i = w t i Z t e x p ( − α t y i h t ( x i ) ) w_{t+1,i} = \frac{w_{ti}}{Z_t}exp(-\alpha_ty_ih_t(x_i)) wt+1,i=Ztwtiexp(−αtyiht(xi))其中 Z t Z_t Zt是规范化因子
- repeat 2-5步
- 最终的分类器是各个分类器的线性组合 f ( x ) = ∑ α t h t ( x ) f(x) = \sum \alpha_th_t(x) f(x)=∑αtht(x)。结果为正,则预测结果1,否则为-1。
需要检查当前基分类器是否比随机猜测好,一旦不满足,则当前基分类器被抛弃,且学习过程停止。
注意:所有分类器 α t \alpha_t αt相加起来并不为1,这里没有规范化操作。
Adaboost不容易过拟合。这一方面的原因还值得进一步探索。
Adaboost的训练误差界
此外,Adaboost的训练误差是以指数速率下降的,这一性质很有吸引力。
二分类AdaBoost算法的解释
上面讲到了二分类AdaBoost的基学习器权重系数公式和样本权重更新公式。接下来,我们讲解这些是如何通过优化损失函数得到的。
AdaBoost为加法模型,损失函数为指数函数,学习算法是前向分步学习算法。
a) 加法模型:最终的强分类器是若干个弱分类器加权得到
b) 前向分步学习算法:我们的算法是通过一轮一轮的弱学习器学习(贪心策略),前面的分类器参数确定,通过优化损失函数来确定当前分类器的参数。
前向分步算法将同时求解参数的优化问题转化为逐次求解的优化问题。
c) 损失函数为指数函数,即:
e
x
p
(
−
y
f
(
x
)
)
exp(-yf(x))
exp(−yf(x))
因为学习的是加法模型,如果能够从前向后,每一步只学习一个基学习器及其系数,逐步逼近优化目标函数,那么就可以简化优化的复杂度。
经过m-1轮已经得到
f
m
−
1
(
x
)
=
α
1
G
1
(
x
)
+
.
.
.
+
α
m
−
1
G
m
−
1
(
x
)
f_{m-1}(x) = \alpha_1G_1(x)+...+\alpha_{m-1}G_{m-1}(x)
fm−1(x)=α1G1(x)+...+αm−1Gm−1(x)
在第m轮,需要
需优化如上目标,注意:只有
α
\alpha
α和
G
(
x
)
G(x)
G(x)是参数。
下面证明,
α
m
\alpha_m
αm和
G
m
G_m
Gm就是之前列出的结果。
AdaBoost小结:
Adaboost的主要优点有:
- Adaboost作为分类器时,分类精度很高
- 在Adaboost的框架下,可以使用各种回归分类模型来构建弱学习器,非常灵活。
- 作为简单的二元分类器时,构造简单,结果可理解
- 不容易发生过拟合
Adaboost的主要缺点有:
对异常样本敏感,异常样本在迭代中可能会获得较高的权重,影响最终的强学习器的预测准确性。