1. 提升方法的基本思路
提升方法基于这样一种思想:对于一个复杂任务来说,将多个专家的判断进行适当的综合所得出的判断,要比其中任何一个专家单独的判断好。实际上,就是“三个臭皮匠顶个诸葛亮”的道理。
对于分类问题而言,给定一个训练样本集,求比较粗糙的分类规则(弱分类器)要比求精确的分类器(强分类器)容易得多。提升方法就是从弱学习算法出发,反复学习,得到一系列弱分类器(又称基本分类器),然后组合这些弱分类器,构成一个强分类器。大多数的提升方法都是改变训练数据的概率分布(训练数据的权值分布),针对不同的训练数据分布调用弱学习算法学习一系列弱分类器。
这样,对提升方法来说,有两个问题需要回答:一是在每一轮如何改变训练数据权值或概率分布;而是如何将弱分类器组合成一个强分类器。关于一个问题,AdaBoost的做法是,提高那些被前一轮分类器错误分类样本的权值,而降低那些被正确分类样本的权值。这样一来,那些没有得到正确分类的数据,由于其权值的增大而受到后一轮的弱分类器的更大关注。于是,分类问题被一系列的弱分类器“分而治之”。置于第二个问题,即弱分类器的组合,AdaBoost采取加权多数表决的方法,具体地,加大分类误差率小的弱分类器的权值,使其在表决中起较大的作用;减小分类误差率大额弱分类器的权值,使其在表决中起较小的作用。
AdaBoost的巧妙之处就在于它将这些想法自然且有效地实现在一种算法里。
2. AdaBoost算法
Input:假设给定一个二分类的训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯ , ( x N , y N ) } T=\{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\} T={(x1,y1),(x2,y2),⋯,(xN,yN)},其中 x i ∈ R n , y i ∈ { + 1 , − 1 } x_i \in \R^n,y_i\in \{+1,-1\} xi∈Rn,yi∈{+1,−1}
Output:最终分类器 G ( x ) G(x) G(x)
Procedure:
(1)初始化训练数据的权值分布
D
1
=
(
w
11
,
w
12
,
⋯
,
w
1
n
)
,
w
1
i
=
1
N
,
i
=
1
,
2
,
⋯
,
N
D_1=(w_{11},w_{12},\cdots,w_{1n}),\quad w_{1i}=\frac{1}{N},\quad i=1,2,\cdots,N
D1=(w11,w12,⋯,w1n),w1i=N1,i=1,2,⋯,N (2)for
m
=
1
,
2
,
⋯
,
M
m=1,2,\cdots,M
m=1,2,⋯,M,repeat:
(a)从具有权值分布 D m D_m Dm 的训练数据集中采样 N N N 个样本学习,得到基本分类器 G m ( x ) : x → { + 1 , − 1 } G_m(x):x\rightarrow \{+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 ] = ∑ i = 1 G m ( x i ) ≠ y i N w m i \begin{aligned}e_m=\displaystyle\sum_{i=1}^{N}P(G_m(x_i)\ne y_i)=\displaystyle\sum_{i=1}^{N}w_{mi}I\bigg[G_m(x_i)\ne y_i\bigg]=\large\displaystyle\sum_{\large i=1\atop G_m(x_i)\ne y_i}^{N}w_{mi}\end{aligned} em=i=1∑NP(Gm(xi)=yi)=i=1∑NwmiI[Gm(xi)=yi]=Gm(xi)=yii=1∑Nwmi (c)计算加权错误率,即 G m ( x ) G_m(x) Gm(x) 的系数 α m = 1 2 ln 1 − e m e m \alpha_m = \frac{1}{2} \ln\frac{1-e_m}{e_m} αm=21lnem1−em (d)更新训练数据集的权值分布 D m + 1 = ( w m + 1 , 1 , w m + 1 , 2 , ⋯ , w m + 1 , N ) w m + 1 , i = w m i Z m e − α m y i G m ( x i ) i = 1 , 2 , ⋯ , N \begin{aligned}&D_{m+1}=(w_{m+1,1},w_{m+1,2},\cdots,w_{m+1,N})\\\\w_{m+1,i}&=\displaystyle\frac{w_{mi}}{Z_m}\Large{e ^{-\alpha_m y_iG_m(x_i)}}\quad \normalsize i=1,2,\cdots,N \end{aligned} wm+1,iDm+1=(wm+1,1,wm+1,2,⋯,wm+1,N)=Zmwmie−αmyiGm(xi)i=1,2,⋯,N 这里 Z m Z_m Zm 是规范化因子 Z m = ∑ i = 1 N w m i e − α m y i G m ( x i ) Z_m=\displaystyle\sum_{i=1}^{N}{w_{mi}}\Large{e ^{-\alpha_m y_iG_m(x_i)}} Zm=i=1∑Nwmie−αmyiGm(xi) (3)构建基本分类器的线性组合 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 ) ) \begin{aligned}G(x)=sign\big(f(x)\big)=sign\bigg(\sum_{m=1}^{M}\alpha_mG_m(x)\bigg)\end{aligned} G(x)=sign(f(x))=sign(m=1∑MαmGm(x))
- 给训练数据集加权值是因为每次训练的 N N N 个数据都是有放回的抽取数据样本,允许重复抽取
- e m < 1 2 \large e_m\lt\displaystyle\frac{1}{2} em<21 ,因为你要是误分率 80 % 80\% 80%的话和误分率 20 % 20\% 20% 没区别,取反就行了,因此, α m ≥ 0 \large\alpha_m\ge0 αm≥0
3. AdaBoost训练误差的有界性
AdaBoost算法最终分类器的训练误差定义为
E
=
1
N
∑
i
=
1
N
I
(
G
(
x
i
)
≠
y
i
)
E=\displaystyle\frac{1}{N}\sum_{i=1}^{N}I\Big(G(x_i)\ne y_i\Big)
E=N1i=1∑NI(G(xi)=yi)
当
G
(
x
i
)
≠
y
i
G(x_i)\ne y_i
G(xi)=yi 时,
y
i
f
(
x
i
)
<
0
y_i f(x_i)\lt0
yif(xi)<0,故
e
−
y
i
f
(
x
i
)
≥
1
\displaystyle \large e^{\large-y_if(x_i)}\ge1
e−yif(xi)≥1,即
E
≤
1
N
∑
i
=
1
N
e
−
y
i
f
(
x
i
)
=
1
N
∑
i
=
1
N
e
−
y
i
∑
m
=
1
M
α
m
G
m
(
x
i
)
=
∑
i
=
1
N
w
1
i
∏
m
=
1
M
e
−
α
m
y
i
G
m
(
x
i
)
\begin{aligned}\large E\le\frac{1}{N}\sum_{i=1}^{N} e^{\large-y_if(x_i)}=\frac{1}{N}\sum_{i=1}^{N} e^{\large -y_i\normalsize\displaystyle\sum_{m=1}^{M}\alpha_mG_m(x_i)} =\sum_{i=1}^{N}w_{1i}\prod_{m=1}^{M}\large e^{-\alpha_m y_iG_m(x_i)} \end{aligned}
E≤N1i=1∑Ne−yif(xi)=N1i=1∑Ne−yim=1∑MαmGm(xi)=i=1∑Nw1im=1∏Me−αmyiGm(xi)
这里是代入 f ( x i ) \large f(x_i) f(xi)的公式,以及指数计算的性质将累加化成累乘,另外 w 1 i = 1 N \large w_{1i}=\displaystyle\frac{1}{N} w1i=N1
从算法过程可知
w
m
i
e
−
α
m
y
i
G
m
(
x
i
)
=
Z
m
w
m
+
1
,
i
,
,
Z
m
=
∑
i
=
1
N
w
m
i
e
−
α
m
y
i
G
m
(
x
i
)
\displaystyle{w_{mi}}\Large{e ^{-\alpha_m y_iG_m(x_i)}}\normalsize=Z_m w_{m+1,i},,Z_m=\displaystyle\sum_{i=1}^{N}{w_{mi}}\Large{e ^{-\alpha_m y_iG_m(x_i)}}
wmie−αmyiGm(xi)=Zmwm+1,i,,Zm=i=1∑Nwmie−αmyiGm(xi),因此
∑
i
=
1
N
w
1
i
∏
m
=
1
M
e
−
α
m
y
i
G
m
(
x
i
)
=
∑
i
=
1
N
[
w
1
i
e
−
α
m
y
1
G
m
(
x
1
)
]
∏
m
=
2
M
e
−
α
m
y
i
G
m
(
x
i
)
=
Z
1
∑
i
=
1
N
w
2
,
i
∏
m
=
2
M
e
−
α
m
y
i
G
m
(
x
i
)
=
⋯
=
Z
1
Z
2
⋯
Z
M
−
1
∑
i
=
1
N
w
M
,
i
e
−
α
M
y
i
G
M
(
x
i
)
=
∏
m
=
1
M
Z
m
\begin{aligned}\large \sum_{i=1}^{N}w_{1i}\prod_{m=1}^{M}\large e^{\large-\alpha_m y_iG_m(x_i)} =&\sum_{i=1}^{N}\Bigg[w_{1i}e^{\large-\alpha_m y_1G_m(x_1)}\Bigg]\prod_{m=2}^{M}\large e^{\large-\alpha_m y_iG_m(x_i)} \\ \\ =& Z_1\sum_{i=1}^{N}w_{2,i}\prod_{m=2}^{M}\large e^{\large-\alpha_m y_iG_m(x_i)}\\\\ =&\cdots\\\\ =&Z_1Z_2\cdots Z_{M-1}\sum_{i=1}^{N}w_{M,i}\large e^{\large-\alpha_M y_iG_M(x_i)}\\\\ =&\prod_{m=1}^{M}Z_m \end{aligned}
i=1∑Nw1im=1∏Me−αmyiGm(xi)=====i=1∑N[w1ie−αmy1Gm(x1)]m=2∏Me−αmyiGm(xi)Z1i=1∑Nw2,im=2∏Me−αmyiGm(xi)⋯Z1Z2⋯ZM−1i=1∑NwM,ie−αMyiGM(xi)m=1∏MZm
至此,我们得到
E
≤
∏
m
=
1
M
Z
m
\displaystyle E\le\prod_{m=1}^{M}Z_m
E≤m=1∏MZm,所以,证明训练误差有界转化为证明
Z
m
Z_m
Zm 有界,首先看一下,
Z
m
Z_m
Zm表达式详细写出来是什么:
Z
m
=
∑
i
=
1
N
w
m
i
e
−
α
m
y
i
G
m
(
x
i
)
=
∑
i
=
1
y
i
=
G
m
(
x
i
)
N
w
m
i
e
−
α
m
+
∑
i
=
1
y
i
≠
G
m
(
x
i
)
N
w
m
i
e
α
m
\large Z_m=\displaystyle\sum_{i=1}^{N}{w_{mi}}\large{e ^{\large-\alpha_m y_iG_m(x_i)}}=\sum^N_{\large i=1\atop y_i=G_m(x_i)}w_{mi}e^{-\alpha_m}+\sum^N_{\large i=1\atop y_i\ne G_m(x_i)}w_{mi}e^{\alpha_m}
Zm=i=1∑Nwmie−αmyiGm(xi)=yi=Gm(xi)i=1∑Nwmie−αm+yi=Gm(xi)i=1∑Nwmieαm又已知
∑
i
=
1
N
w
m
i
=
1
,
e
m
=
∑
i
=
1
G
m
(
x
i
)
≠
y
i
N
w
m
i
,
e
α
m
=
1
−
e
m
e
m
\large\displaystyle \sum_{i=1}^{N}w_{mi}=1, e_m=\large\displaystyle\sum_{\large i=1\atop G_m(x_i)\ne y_i}^{N}w_{mi},e^{\alpha_m}=\sqrt{\frac{1-e_m}{e_m}}
i=1∑Nwmi=1,em=Gm(xi)=yii=1∑Nwmi,eαm=em1−em,所以可知
Z
m
=
(
1
−
e
m
)
e
−
α
m
+
e
m
e
α
m
=
2
e
m
(
1
−
e
m
)
≤
e
m
+
1
−
e
m
=
1
\large Z_m=(1-e_m)e^{-\alpha_m}+e_m e^{\alpha_m}=2\sqrt{e_m(1-e_m)}\le e_m+1-e_m=1
Zm=(1−em)e−αm+emeαm=2em(1−em)≤em+1−em=1
基本不等式: a b ≤ a + b 2 \large\displaystyle \sqrt{ab}\le \frac{a+b}{2} ab≤2a+b
综上所述, E ≤ ∏ m = 1 M Z m ≤ 1 E\le \displaystyle\prod_{m=1}^M Z_m\le 1 E≤m=1∏MZm≤1,故AdaBoost算法训练误差有界。
这里另外再提一句,随着 M M M 的增大, E E E 的值会快速下降。这是因为 e m ∈ ( 0 , 1 2 ) \displaystyle e_m\in(0,\frac{1}{2}) em∈(0,21), Z m 实 际 上 是 小 于 1 , 取 不 到 等 号 Z_m实际上是小于1,取不到等号 Zm实际上是小于1,取不到等号,故 M M M 每增加 1 1 1, E E E 都要乘以一个小于 1 1 1 的数,当然会不断缩小了。