AdaBoost(“Adaptive Boosting”(自适应增强))算法是提升算法(boosting)的一种。提升方法是从弱学习器出发,反复学习得到一系列若分类器,然后组合弱分类器。
对提升方法来说,有两个问题需要回答:一是在每一 轮如何改变训练数据的权值或概率分布;二是如何将弱分类器组合成-一个强分类器。关于第1个问题,AdaBoost的做法是,提高那些被前一轮弱分类器错误分类样本的权值,而降低那些被正确分类样本的权值。第2个问题,即弱分类器的组合,AdaBoost采取加权多数表决的方法。具体地,加大分类误差率小的弱分类器的权值,使其在表决中起较大的作用,减小分类误差率大的弱分类器的权值,使其在表决中起较小的作用。
算法思想:它的自适应在于:前一个基本分类器分错的样本会得到加强,加权后的全体样本再次被用来训练下一个基本分类器。同时,在每一轮中加入一个新的弱分类器,直到达到某个预定的足够小的错误率或达到预先指定的最大迭代次数
AdaBoost算法
- 输入:训练数据集KaTeX parse error: Undefined control sequence: \cal at position 51: …_N)\}, x_i\in \̲c̲a̲l̲ ̲X\sube \R^n, 弱学习方法
- 输出:最终分类器 G ( x ) G(x) G(x)
步骤
初始化训练数据的权值分布 D 1 = ( w 11 , ⋯ , w 1 i , ⋯ , w 1 N ) , w 1 i = 1 N , i = 1 , 2 , … , N D_1=(w_{11},\cdots,w_{1i},\cdots,w_{1N}),w_{1i}=\frac{1}{N},i=1,2,\ldots,N D1=(w11,⋯,w1i,⋯,w1N),w1i=N1,i=1,2,…,N
m = 1 , 2 , … , M m = 1,2, \ldots,M m=1,2,…,M
(a) 使用具有权值分布 D m D_m Dm的训练数据集学习,得到基本的分类器:
G m ( x ) : X − > { − 1 , + 1 } G_m(x):\mathcal X->\{-1,+1\} Gm(x):X−>{−1,+1}(b) 求 G m ( x ) G_m(x) Gm(x)在训练集上的分类误差率 :
e m = ∑ i = 1 N P ( G m ( x i ) ≠ y i ) = ∑ i = 1 N w m i I ( G m ( x i ) ≠ y i ) e_m=\sum_{i=1}^{N}P(G_m(x_i)\ne y_i)=\sum_{i=1}^{N}w_{mi}I(G_m(x_i)\ne y_i) em=i=1∑NP(Gm(xi)=yi)=i=1∑NwmiI(Gm(xi)=yi)
© 计算 G m ( x ) G_m(x) Gm(x)的系数:
α m = 1 2 l o g 1 − e m e m \alpha_m=\frac{1}{2}log\frac{1-e_m}{e_m} αm=21logem1−em(d) 更新训练集的权值分布:
w m + 1 , i = w m i Z m exp ( − α m y i G m ( x i ) ) w_{m+1,i}=\frac{w_{mi}}{Z_m}\exp(-\alpha_my_iG_m(x_i)) wm+1,i=Zmwmiexp(−αmyiGm(xi))其中, Z m Z_m Zm 是规范化因子, Z m = ∑ i = 1 N w m i e x p ( − α m y i G m ( x i ) ) Z_m=\sum_{i=1}^Nw_{mi}exp(-\alpha_my_iG_m(x_i)) Zm=∑i=1Nwmiexp(−αmyiGm(xi))
构建基本分类器的线性组合:
f ( x ) = ∑ m = 1 M α m G m ( x ) f(x)=\sum_{m=1}^M\alpha_mG_m(x) f(x)=m=1∑MαmGm(x)最终分类器:
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(\sum_{m=1}^M\alpha_mG_m(x)) G(x)=sign(f(x))=sign(m=1∑MαmGm(x))
说明:
步骤(1)假设训练数据具有均匀的权值分布,即每个训练样本在基本分类器的学习中作用相同,这一假设保证第一步能够在原始数据上学习基本分类器 G 1 ( x ) G_1(x) G1(x)。
步骤(2)AdaBoost 反复学习基本分类器,在每一轮 m = 1 , 2 … , M m=1,2\ldots,M m=1,2…,M 顺次执行下列操作:
(a)使用当前分布 D m D_m Dm 加权的训练数据集,学习基本分类器 G m ( x ) G_m(x) Gm(x)。
(b)计算基本分类器
G
m
(
x
)
G_m(x)
Gm(x) 在加权训练集上的误分类误差:
e
m
=
∑
i
=
1
N
w
m
i
I
(
G
m
(
x
i
)
≠
y
i
)
=
∑
G
m
(
x
i
)
≠
y
i
w
m
i
e_m=\sum_{i=1}^{N}w_{mi}I(G_m(x_i)\ne y_i) = \sum_{G_m(x_i) \ne y_i} w_{mi}
em=i=1∑NwmiI(Gm(xi)=yi)=Gm(xi)=yi∑wmi
误差率是指被
G
m
(
x
)
G_m(x)
Gm(x)误分类样本的权值之和。
(c)计算基本分类器
G
m
(
x
)
G_m(x)
Gm(x)的系数
α
m
\alpha_m
αm。由:
α
m
=
1
2
l
o
g
1
−
e
m
e
m
\alpha_m=\frac{1}{2}log\frac{1-e_m}{e_m}
αm=21logem1−em
可知,当
e
m
≤
1
2
e_m \leq \frac{1}{2}
em≤21 时,
α
m
≥
0
\alpha_m \geq 0
αm≥0,且
α
m
\alpha_m
αm 随着
e
m
e_m
em 的减小而增大,所以分类误差率越小的基本分类器在最终分类器中的作用越大。
(d)更新训练数据的权值分布为下一轮做准备。式 w m + 1 , i = w m i Z m e x p ( − α m y i G m ( x i ) ) w_{m+1,i}=\frac{w_{mi}}{Z_m}exp(-\alpha_my_iG_m(x_i)) wm+1,i=Zmwmiexp(−αmyiGm(xi))中:
当 y i = G m ( x i ) y_i=G_m(x_i) yi=Gm(xi)时, y i G m ( x i ) = 1 y_iG_m(x_i)=1 yiGm(xi)=1
当 y i ≠ G m ( x i ) y_i\ne G_m(x_i) yi=Gm(xi)时, y i G m ( x i ) = − 1 y_iG_m(x_i)=-1 yiGm(xi)=−1
所以有:
w
m
+
1
,
i
=
{
w
m
i
Z
m
e
−
α
m
y
i
=
G
m
(
x
i
)
w
m
i
Z
m
e
α
m
y
i
≠
G
m
(
x
i
)
w_{m+1,i}=\begin{cases} \frac{w_{mi}}{Z_m}e^{-\alpha_m} \quad y_i=G_m(x_i) \\ \frac{w_{mi}}{Z_m}e^{\alpha_m} \qquad y_i\ne G_m(x_i) \end{cases}
wm+1,i={Zmwmie−αmyi=Gm(xi)Zmwmieαmyi=Gm(xi)
由此可知,被基本分类器
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 倍。
步骤(3),实现M个基本分类器的加权表决。
AdaBoost算法解释
AdaBoost 算法是加法模型,损失函数为指数函数,学习算法为前向分步算法的二类分类学习算法。
前向分步算法
考虑加法模型:
f
(
x
)
=
∑
m
=
1
M
β
m
b
(
x
;
γ
m
)
f(x) = \sum_{m=1}^M \beta_mb(x;\gamma_m)
f(x)=m=1∑Mβmb(x;γm)
其中,
b
(
x
;
γ
m
)
b(x;\gamma_m)
b(x;γm) 为基函数,
γ
m
\gamma_m
γm 为基函数的参数,
β
m
\beta_m
βm 为基函数的系数。
给定训练数据及损失函数
L
(
y
,
f
(
x
)
)
L(y,f(x))
L(y,f(x)) 的条件下,学习加法模型
f
(
x
)
f(x)
f(x) 成为经验风险极小化即损失函数极小化问题:
min
β
m
,
γ
m
∑
i
=
1
N
L
(
y
i
,
∑
m
=
1
M
β
m
b
(
x
;
γ
m
)
)
\min \limits_{\beta_m,\gamma_m} \sum_{i=1}^N L \left(y_i,\sum_{m=1}^M \beta_mb(x;\gamma_m)\right)
βm,γmmini=1∑NL(yi,m=1∑Mβmb(x;γm))
前向分步算法求解此问题的想法:从前向后,每一步只学习一个基函数及其系数,逐步逼近优化目标函数。每步只需优化如下的损失函数:
min
β
,
γ
∑
i
=
1
N
L
(
y
i
,
β
b
(
x
;
γ
)
)
\min \limits_{\beta,\gamma} \sum_{i=1}^N L \left(y_i,\beta b(x;\gamma)\right)
β,γmini=1∑NL(yi,βb(x;γ))
给定训练数据集KaTeX parse error: Undefined control sequence: \cal at position 49: …y_N)}, x_i \in \̲c̲a̲l̲ ̲X \sube R^n, y_…,损失函数
L
(
y
,
f
(
x
)
)
L(y,f(x))
L(y,f(x)) 和基函数集合
{
b
(
x
;
γ
)
}
\{b(x;\gamma)\}
{b(x;γ)} ,学习的加法模型
f
(
x
)
f(x)
f(x) 的前向分步算法如下:
输入:训练数据集KaTeX parse error: Undefined control sequence: \cal at position 49: …y_N)}, x_i \in \̲c̲a̲l̲ ̲X \sube R^n, y_…, 损失函数 L ( y , f ( x ) ) L(y, f(x)) L(y,f(x)); 基函数集合 { b ( x ; γ ) } \{b(x;\gamma)\} {b(x;γ)}
输出:加法模型 f ( x ) f(x) f(x)
步骤:
初始化 f 0 ( x ) = 0 f_0(x)=0 f0(x)=0
对 m = 1 , 2 , … , M m=1,2,\dots,M m=1,2,…,M
极小化损失函数
( β m , γ m ) = arg min β , γ ∑ i = 1 N L ( y i , f m − 1 ( x i ) + β b ( x i ; γ ) ) (\beta_m,\gamma_m)=\arg\min \limits_ {\beta,\gamma}\sum_{i=1}^NL(y_i, f_{m-1}(x_i)+\beta b(x_i;\gamma)) (βm,γm)=argβ,γmini=1∑NL(yi,fm−1(xi)+βb(xi;γ))更新
f m ( x ) = f m − 1 ( x ) + β m b ( x ; γ m ) f_m(x)=f_{m-1}(x)+\beta _mb(x;\gamma_m) fm(x)=fm−1(x)+βmb(x;γm)得到加法模型
f ( x ) = f M ( x ) = ∑ m = 1 M β m b ( x ; γ m ) f(x)=f_M(x)=\sum_{m=1}^M\beta_m b(x;\gamma_m) f(x)=fM(x)=m=1∑Mβmb(x;γm)
前向分步算法与AdaBoost
AdaBoost算法是前向分步算法的特例,这时,模型是由基本的分类器组成的加法模型,损失函数是指数函数。
由前向分步算法可以推导出AdaBoost。具体过程如下:
AdaBoost 的最终分类器是一个加法模型:
f
(
x
)
=
∑
m
=
1
M
α
m
G
m
(
x
)
f(x)=\sum_{m=1}^M\alpha_mG_m(x)
f(x)=m=1∑MαmGm(x)
假设经过
m
−
1
m-1
m−1次迭代,前向分步算法已经得到
f
m
−
1
(
x
)
f_{m-1}(x)
fm−1(x):
f
m
−
1
(
x
)
=
f
m
−
2
(
x
)
+
α
m
−
1
G
m
−
1
(
x
)
=
α
1
G
1
(
x
)
+
α
m
−
1
G
m
−
1
(
x
)
\begin{aligned} f_{m-1}(x) &= f_{m-2}(x) + \alpha_{m-1}G_{m-1}(x) \\ &= \alpha_{1}G_{1}(x) + \alpha_{m-1}G_{m-1}(x) \end{aligned}
fm−1(x)=fm−2(x)+αm−1Gm−1(x)=α1G1(x)+αm−1Gm−1(x)
在第
m
m
m轮迭代得到
α
m
,
G
m
(
x
)
,
f
m
(
x
)
\alpha_m,G_m(x),f_m(x)
αm,Gm(x),fm(x):
f
m
(
x
)
=
f
m
−
1
(
x
)
+
α
m
G
m
(
x
)
f_{m}(x) = f_{m-1}(x) + \alpha_{m}G_{m}(x)
fm(x)=fm−1(x)+αmGm(x)
设该前向分步算法的损失函数是指数函数:
L
(
y
,
f
(
x
)
)
=
exp
[
−
y
f
(
x
)
]
L(y,f(x)) = \exp [-yf(x)]
L(y,f(x))=exp[−yf(x)]
第m轮得到的
α
m
,
G
m
(
x
)
,
f
m
(
x
)
\alpha_m,G_m(x),f_m(x)
αm,Gm(x),fm(x) 在训练集上损失函数最小,即:
(
α
m
,
G
m
(
x
)
)
=
arg
min
α
,
G
∑
i
=
1
N
exp
[
−
y
i
(
f
m
−
1
(
x
i
)
+
α
G
(
x
i
)
)
]
(\alpha_m,G_m(x)) = \arg\min \limits_{\alpha,G}\sum_{i=1}^N\exp [-y_i(f_{m-1}(x_i) + \alpha G(x_i))]
(αm,Gm(x))=argα,Gmini=1∑Nexp[−yi(fm−1(xi)+αG(xi))]
令
w
ˉ
m
i
=
exp
[
−
y
i
f
m
−
1
(
x
i
)
]
\bar w_{mi} = \exp[-y_if_{m-1(x_i)}]
wˉmi=exp[−yifm−1(xi)],为常数,则上式可以简化为:
(
α
m
,
G
m
(
x
)
)
=
arg
min
α
,
G
∑
i
=
1
N
w
ˉ
m
i
exp
[
−
y
i
α
G
(
x
i
)
]
(\alpha_m,G_m(x)) = \arg\min \limits_{\alpha,G}\sum_{i=1}^N \bar w_{mi} \exp [-y_i \alpha G(x_i)]
(αm,Gm(x))=argα,Gmini=1∑Nwˉmiexp[−yiαG(xi)]
(1)先求
G
m
∗
(
x
)
G_m^*(x)
Gm∗(x),对任意
α
>
0
\alpha > 0
α>0,使得上式最小的
G
(
x
)
G(x)
G(x)由下式得到:
G
m
∗
(
x
)
=
arg
min
G
∑
i
=
1
N
w
ˉ
m
i
I
(
y
i
≠
G
(
x
i
)
)
G_m^*(x) = \arg\min \limits_{G}\sum_{i=1}^N \bar w_{mi} I(y_i \ne G(x_i))
Gm∗(x)=argGmini=1∑NwˉmiI(yi=G(xi))
此分类器
G
m
∗
(
x
)
G_m^*(x)
Gm∗(x)即为AdaBoost算法的基本分类器。即使得第m轮加权训练数据分类误差率最小的基本分类器。
(2)再求 α m ∗ \alpha_m^* αm∗。
将
G
m
∗
(
x
)
G_m^*(x)
Gm∗(x)带入损失函数,并对
α
\alpha
α 求导,使其等于0,便可得到:
α
m
=
1
2
l
o
g
1
−
e
m
e
m
\alpha_m=\frac{1}{2}log\frac{1-e_m}{e_m}
αm=21logem1−em
其中,
e
m
e_m
em 是分类误差率
e
m
=
∑
i
=
1
N
w
ˉ
m
i
I
(
y
i
≠
G
m
(
x
i
)
)
∑
i
=
1
N
w
ˉ
m
i
=
∑
i
=
1
N
w
m
i
I
(
y
i
≠
G
(
x
i
)
)
e_m = \frac{\sum\limits_{i=1}^{N}\bar w_{mi}I(y_i \neq G_m(x_i))}{\sum\limits_{i=1}^{N} \bar w_{mi}} = \sum\limits_{i=1}^{N}w_{mi}I(y_i \neq G(x_i))
em=i=1∑Nwˉmii=1∑NwˉmiI(yi=Gm(xi))=i=1∑NwmiI(yi=G(xi))
求解得的
G
m
∗
(
x
)
,
α
m
∗
G_m^*(x),\alpha_m^*
Gm∗(x),αm∗与AdaBoost 算法的结果相同。
最后看样本权重的更新。由
f
m
(
x
)
=
f
m
−
1
(
x
)
+
α
m
G
m
(
x
)
w
ˉ
m
i
=
exp
[
−
y
i
f
m
−
1
(
x
i
)
]
f_{m}(x) = f_{m-1}(x) + \alpha_mG_m(x)\\ \bar w_{mi} = \exp[-y_if_{m-1(x_i)}]
fm(x)=fm−1(x)+αmGm(x)wˉmi=exp[−yifm−1(xi)]
可得:
w
ˉ
m
+
1
,
i
=
w
ˉ
m
,
i
exp
[
−
y
i
α
m
G
m
(
x
)
]
\bar w_{m+1,i} = \bar w_{m,i}\exp[-y_i\alpha_mG_m(x)]
wˉm+1,i=wˉm,iexp[−yiαmGm(x)]