前言
集成学习(Ensemble Learning)是利用多个学习器来实现学习任务的一种机器学习模型,集成学习目前已经涉及到各个领域,并有不错的学习效果。AdaBoost是集成学习与提升方法中的代表,本文将介绍AdaBoost的算法原理
一、AdaBoost基本思想
1.弱分类器和强分类器
弱分类器:比较粗糙的分类规则,分类的正确率仅比随机分类略好
强分类器:精确的分类规则,分类的正确率非常高
2.核心思想
提升方法的基本思想很简单,就是“三个臭皮匠顶一个诸葛亮”。因为求弱分类器比求强分类器要容易的多,从弱学习算法出发,得到一系列的弱分类器,然后将这些弱分类器组合起来构成一个强分类器,达到分类效果。
给定一个数据集,如图,按层进行学习(每条虚线上均为一层弱分类器)。对于每一层来说,数据集是不变的,改变的是权重w(i)(AdaBoost根据样本分类对错改变权重,也即前一层分类对的下一层没必要过多关注,在下一层所占权重变小,前一层分类错误的在下一层被重点关注,所占权重大)。每一层弱分类器学习完成后,根据分类误差率得到相应的权值(分类误差率小的占最后总表决权值大,分类误差率大的占最后总表决权小)。最终,将得到的所有弱分类器按权重线性组合输出。
二、算法实现
1. 引入数据集
假设给定一个二类分类的训练数据集T = {( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) x_1, y_1), (x_2, y_2),...,(x_N, y_N) x1,y1),(x2,y2),...,(xN,yN)},其中,每个样本点由实例和标签组成。实例 x i ∈ x_i \in xi∈ X ⊆ \subseteq ⊆ R n R^n Rn,标签 y i y_i yi ∈ \in ∈ Y = {-1, +1},X是实例空间,Y是标签集合。
2. 输出最终分类器
2.1 初始化训练数据的权值
- D 1 D_1 D1 = ( w 11 , . . . , w 1 i , . . . , w 1 N w_{11},...,w_{1i},...,w_{1N} w11,...,w1i,...,w1N), w 1 i w_{1i} w1i = 1 N \frac{1}{N} N1,i = 1, 2, 3,…,N
2.2 对m = 1,2,…,M
(a) 使用具有权值分布 D m D_m Dm的训练数据集学习,得到基本分类器 G m ( x ) G_m(x) Gm(x):X → \rightarrow → {-1, +1}
(b) 计算 G m ( x ) G_m(x) Gm(x)在训练数据集上的分类误差率
-
e
m
e_m
em =
∑
i
=
1
N
P
(
G
m
(
x
i
)
≠
y
i
)
=
∑
i
=
1
N
w
m
i
I
(
G
m
(
x
i
)
≠
y
i
)
\displaystyle\sum_{i=1}^{N} P(G_m(x_i) \neq y_i) = \displaystyle\sum_{i=1}^{N}w_{mi}I(G_m(x_i) \neq y_i)
i=1∑NP(Gm(xi)=yi)=i=1∑NwmiI(Gm(xi)=yi) ①
其中,I 表示 G m ( x i ) ≠ y i G_m(x_i) \neq y_i Gm(xi)=yi的实例个数, e m e_m em = ∑ i = 1 N P ( G m ( x i ) ≠ y i ) = ∑ G m ( x i ) ≠ y i w m i \displaystyle\sum_{i=1}^{N} P(G_m(x_i) \neq y_i) = \displaystyle\sum_{G_m(x_i) \neq y_i}w_{mi} i=1∑NP(Gm(xi)=yi)=Gm(xi)=yi∑wmi 这里, w m i w_{mi} wmi表示第 m 轮中第 i 个实例的权值,所有的权值之和为1( ∑ i = 1 N w m i = 1 \displaystyle\sum_{i=1}^{N} w_{mi}= 1 i=1∑Nwmi=1)。 G m ( x ) G_m(x) Gm(x)在加权的训练数据集上的分类误差率是被 G m ( x ) G_m(x) Gm(x)误分类样本的权值之和,所以数据权值分布 D m D_m Dm在每一轮随基本分类器 G m ( x ) G_m(x) Gm(x)分类误差率的改变而更新
(c)计算 G m ( x ) G_m(x) Gm(x)系数
- α m \alpha_m αm = 1 2 l n 1 − e m e m \frac{1}{2}ln\frac{1-e_m}{e_m} 21lnem1−em ②
α m \alpha_m αm是所有基本分类器在最终分类器中的权重, 由②可知,当 e m ≤ 1 2 e_m\le\frac{1}{2} em≤21时, α m ≥ 0 \alpha_m \geq 0 αm≥0, e m ∈ ( 0 , 1 ) e_m \in (0, 1) em∈(0,1),该函数为单减函数,所以分类误差率 e m e_m em越小,最终所占权重 α m \alpha_m αm就越大。
(d)更新训练数据集的权值分布
- D m + 1 = ( w m + 1 , 1 , . . . , w m + 1 , i , . . . , w m + 1 , N ) D_{m+1} = (w_{m+1,1},...,w_{m+1,i},...,w_{m+1,N}) Dm+1=(wm+1,1,...,wm+1,i,...,wm+1,N) ③
-
w
m
+
1
,
i
=
w
m
i
Z
m
exp
(
−
α
m
y
i
G
m
(
x
i
)
)
,
i
=
1
,
2
,
.
.
.
,
N
w_{m+1,i} = \frac{w_{mi}}{Z_m}\exp(-\alpha_my_iG_m(x_i)), i = 1,2,...,N
wm+1,i=Zmwmiexp(−αmyiGm(xi)),i=1,2,...,N④
这里, Z m Z_m Zm是规范化因子 -
Z
m
=
∑
i
=
1
N
w
m
i
exp
(
−
α
m
y
i
G
m
(
x
i
)
)
Z_m = \displaystyle\sum_{i=1}^{N} w_{mi}\exp(-\alpha_my_iG_m(x_i))
Zm=i=1∑Nwmiexp(−αmyiGm(xi)) ⑤
它使 D m + 1 D_{m+1} Dm+1成为一个概率分布。
上式④可以写为: w m + 1 , i = { w m i Z m e − α m , G m ( x i ) = y i w m i Z m e α m , G m ( x i ) ≠ y i w_{m+1,i}= \begin{cases} \frac{w_{mi}}{Z_m}e^{-\alpha_m}, G_m(x_i) = y_i\\ \frac{w_{mi}}{Z_m}e^{\alpha_m}, G_m(x_i) \neq y_i \end{cases} wm+1,i={Zmwmie−αm,Gm(xi)=yiZmwmieαm,Gm(xi)=yi
由此式可知,被弱分类器 G m ( x ) G_m(x) Gm(x)误分类样本的权值得以扩大,而被正确分类样本的权值得以缩小。由下式比上上式可知,被误分类的样本放大了 e 2 α m = 1 − e m e m e^{2\alpha_m} = \frac{1-e_m}{e_m} e2αm=em1−em倍。因此,误分类的样本在下一轮将更多的被关注,而正确分类的在下一轮被关注更少。
2.3 构建基本分类器(弱分类器)的线性组合
-
f
(
x
)
=
∑
m
=
1
M
α
m
G
m
(
x
i
)
f(x) = \displaystyle\sum_{m=1}^{M} \alpha_mG_m(x_i)
f(x)=m=1∑MαmGm(xi) ⑥
得到最终的分类器 - G ( x ) = s i g n ( f ( x ) ) = s i g n ( ∑ m = 1 M α m G m ( x ) ) G(x) = sign(f(x)) = sign(\displaystyle\sum_{m=1}^{M}\alpha_mG_m(x)) G(x)=sign(f(x))=sign(m=1∑MαmGm(x)) ⑦
三、AdaBoost训练误差分析
AdaBoost最终分类器的训练误差
- 1 N ∑ i = 1 N I ( G ( x i ) ≠ y i ) ≤ 1 N ∑ i exp ( − y i f ( x i ) ) = ∏ m Z m \frac{1}{N}\displaystyle\sum_{i=1}^{N}I(G(x_i) \neq y_i) \le \frac{1}{N}\displaystyle\sum_{i}\exp(-y_if(x_i)) = \displaystyle\prod_{m}Z_m N1i=1∑NI(G(xi)=yi)≤N1i∑exp(−yif(xi))=m∏Zm
该定理说明,可以在每一轮选取适当的 G m G_m Gm使得 Z m Z_m Zm最小,从而使训练误差下降最快。
- ∏ m Z m = ∏ m = 1 M [ 2 e m ( 1 − e m ) ] = ∏ m = 1 M ( 1 − 4 γ m 2 ) ≤ exp ( − 2 ∑ m = 1 M γ m 2 ) \displaystyle\prod_{m}Z_m = \displaystyle\prod_{m=1}^{M}[2\sqrt{e_m(1-e_m)}] = \displaystyle\prod_{m=1}^{M}\sqrt{(1-4\gamma_m^{2})} \le \exp(-2\displaystyle\sum_{m=1}^{M}\gamma_m^{2}) m∏Zm=m=1∏M[2em(1−em)]=m=1∏M(1−4γm2)≤exp(−2m=1∑Mγm2),其中 γ m = 1 2 − e m \gamma_m = \frac{1}{2} - e_m γm=21−em
推论,如果存在 γ m > 0 , 对 所 有 的 m 有 γ m ≥ γ \gamma_m > 0,对所有的 m 有\gamma_m \geq \gamma γm>0,对所有的m有γm≥γ,则
- 1 N ∑ i = 1 N I ( G ( x i ) ≠ y i ) ≤ exp ( − 2 M γ 2 ) \frac{1}{N}\displaystyle\sum_{i=1}^{N}I(G(x_i) \neq y_i) \le\exp(-2M\gamma^2) N1i=1∑NI(G(xi)=yi)≤exp(−2Mγ2)
这个推论说明在此条件下,AdaBoost的训练误差以指数下降。
四、总结
AdaBoost具备非常典型的集成学习特点,将多个弱分类器按分类正确率得到不一样的权重,最后将所有的弱分类器按所得权重线性结合在一起,从而得到一个强分类器。
1. 优点
AdaBoost能够很巧妙的将多个弱分类器组合起来形成一个强分类器,而弱分类器可由不同的分类算法形成,并且AdaBoost精度很高。
2.缺点
AdaBoost缺点很明显,因为训练过程相当于黑盒,训练多少次能达到强分类器的效果我们不知道,所以训练次数难以确定。并且每一次都是训练完整个数据集,导致非常耗时。
参考文献
李航.统计学习方法(第二版) [M].北京:清华大学出版社,2019