AdaBoost详解

文章目录

  • 提升方法的思路
  • 强可学习和弱可学习
  • PAC学习
  • AdaBoost
  • AdaBosst算法
  • AdaBoost算法的训练误差分析
  • 前向分步算法
    • 前向分步算法和AdaBoost
  • 参考文献

提升方法的思路

对于一个复杂任务,将多个决策进行适当的综合所得出的判断,要比其中任何一个决策更为准确.

对于分类问题,提升方法的就是从弱学习方法出发,反复学习,得到一系列弱分类器,然后组合这些弱分类器,构成一个强分类器,大多数提升方法都是通过改变训练数据的概率分布,(即通过对训练数据进行加权),针对不同分布的数据调用弱学习方法学习一系列的弱分类器.

提升方法有两个关键所在:

  • 在每一轮如果改变训练数据的权值或概率分布.
  • 如何将弱分类器组合成一个强分类器.

强可学习和弱可学习

Kearns和Valiant提出了强可学习和弱可学习的概念.
在概率近似正确(probably approximately correct, PAC)学习的框架中,

一个概念如果存在一个多项式的学习算法能够学习它,并且正确率很高,那么就称这个概念是强可学习的.

一个概念如果存在一个多项式的学习算法能够学习它,学习的正确率只比随机猜测略好,则称这个概念是弱可学习的.

Schapire后来证明强可学习和若可学习是等价的,即在PAC学习框架下,一个概念是强可学习的充分必要条件是这个概念是弱可学习的.

PAC学习

很容易得知,除非对所有可能的数据进行训练,否则总会存在多个假设使得错误率不为0,也就是说学习器不能保证和目标函数完全一致,且由于样本是随机选择的,总存在一定的偶然性,使得学习器学习到的与真实分布不同。

因此我们只要求学习学习到一个近似正确的假设,即PAC学习.

一个可PAC学习的学习需要满足两个条件:

  • 学习器必须以任意高的概率输出一个错误率任意低的假设.
  • 学习的时间最多以多项式方式增长.

AdaBoost

对于提升方法的两个关键,AdaBoost采取的做法是,提高被前一轮弱分类器错误分类样本的权值,降低被正确分类样本的权值,这样分类器就会更加关注上一轮被错分类的数据;对于弱分类器的组合,AdaBoost采取加权多数表决的方法,对于分类误差率小的弱分类器取较大的权值,减小分类误差率大得弱分类器的权值.

AdaBosst算法

假设给定一个二类分类的训练数据集 T = ( x 1 , y 1 ) , ( x 2 , y 2 ) … ( x N , y N ) T={(x_1,y_1), (x_2, y_2)\dots(x_N, y_N)} T=(x1,y1),(x2,y2)(xN,yN),其中,每个样本点有实例和标记组成. 标记 y i = { − 1 , + 1 } y_i = \{-1, +1\} yi={1,+1},AdaBoost利用以下算法,从训练数据中学习一系列弱分类器,然后将弱分类器线性组合成为一个强分类器.

算法(AdaBoost)

输入:训练数据集,弱学习算法.

输出:强分类器 G ( x ) G(x) G(x)

  1. 初始化训练数据的权值分布
    D 1 = ( w 11 , … , w 1 i , … , w 1 N ) ,   w 1 i = 1 N ,   i = 1 , 2 … , N D_1 = (w_{11},\dots,w_{1i},\dots,w_{1N}),\ w_{1i}=\frac{1}{N},\ i=1,2\dots,N D1=(w11,,w1i,,w1N), w1i=N1, i=1,2,N
  2. m = 1 , 2 , … , M m=1,2,\dots,M m=1,2,,M
    1. 使用具有权值分布的 D m D_m Dm的训练数据集学习,得到基本分类器 G m ( x ) : x → { − 1 , + 1 } G_m(x):x\rightarrow\{-1,+1\} Gm(x):x{1,+1}.
    2. 计算 G m ( x ) G_m(x) Gm(x)在训练数据集上的分类误差率 e m = P ( G m ( x i ) ≠ y i ) = ∑ i = 1 N w m i I ( G m ( x i ) ≠ y i ) e_m = P(G_m(x_i)\neq y_i) = \sum_{i=1}^Nw_{mi}I(G_m(x_i)\neq y_i) em=P(Gm(xi)̸=yi)=i=1NwmiI(Gm(xi)̸=yi).
    3. 计算 G m ( x ) G_m(x) Gm(x)的系数 α m = 1 2 log ⁡ 1 − e m e m \alpha_m = \frac{1}{2}\log \frac{1-e_m}{e_m} αm=21logem1em.
    4. 更新训练数据集的权值分布,这里的 Z m Z_m Zm是规范化因子
      D m + 1 = ( w m + 1 , 1 , … , w m + 1 , i , … , w m + 1 , N ) W m + 1 , i = w m i Z m exp ⁡ ( − α m y i G m ( x i ) ) , i = 1 , 2 … , N Z m = ∑ i = 1 N w m i exp ⁡ ( − α m y i G m ( x i ) ) D_{m+1} = (w_{m+1,1},\dots,w_{m+1,i},\dots,w_{m+1,N})\\ W_{m+1,i}=\frac{w_{mi}}{Z_m}\exp(-\alpha_my_iG_m(x_i)),i=1,2\dots,N\\ Z_m = \sum_{i=1}^Nw_{mi}\exp(-\alpha_my_iG_m(x_i)) Dm+1=(wm+1,1,,wm+1,i,,wm+1,N)Wm+1,i=Zmwmiexp(αmyiGm(xi))i=1,2,NZm=i=1Nwmiexp(α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=1MαmGm(x),得到最终分类器
    G ( x ) = s i g n ( f ( x ) ) = s i n g ( ∑ m = 1 M α m G m ( x ) ) G(x) = sign(f(x)) = sing(\sum_{m=1}^M\alpha_mG_m(x)) G(x)=sign(f(x))=sing(m=1MαmGm(x))

在计算 G m ( x ) G_m(x) Gm(x)在训练数据集上的分类误差率 e m e_m em,我们可以得到 e m = ∑ G m ( x i ) ≠ y i w m i e_m = \sum_{G_m(x_i)\neq y_i}w_{mi} em=Gm(xi)̸=yiwmi,即分类误差率是被 G m ( x ) G_m(x) Gm(x)五分类样本的权值之和.

e m ≤ 1 2 e_m\leq \frac{1}{2} em21时, α m ≥ 0 \alpha_m\geq 0 αm0,并且 α m \alpha_m αm e m e_m em的减小而增大,所以分类误差率越小的弱分类器在最终分类器中的权值越大.

AdaBoost算法的训练误差分析

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}\sum_{i=1}^NI(G(x_i)\neq y_i)\leq \frac{1}{N}\sum_i\exp(-y_if(x_i))=\prod_mZ_m N1i=1NI(G(xi)̸=yi)N1iexp(yif(xi))=mZm

证明
显然式子第一部分的值小于等于1,而当 G ( x i ) ≠ y i G(x_i)\neq y_i G(xi)̸=yi时, y i f ( x i ) < 0 y_if(x_i)<0 yif(xi)<0,因而有 exp ⁡ ( − y i f ( x i ) ) ≥ 1 \exp(-y_if(x_i))\geq 1 exp(yif(xi))1,所以左半部分成立.

1 N ∑ i exp ⁡ ( − y i f ( x i ) ) = 1 N ∑ i exp ⁡ ( − ∑ m = 1 M α m y i G m ( x i ) ) = ∑ i w 1 i exp ⁡ ( − ∑ m = 1 M α m y i G m ( x i ) ) = ∑ i w 1 i ∏ m = 1 M exp ⁡ ( − α m y i G m ( x i ) ) = Z 1 ∑ i w 2 i ∏ m = 2 M exp ⁡ ( − α m y i G m ( x i ) ) = Z 1 Z 2 ∑ i w 3 i ∏ m = 3 M exp ⁡ ( − α m y i G m ( x i ) ) = … = Z 1 Z 2 … Z M − 1 ∑ i w M i exp ⁡ ( − α M y i G M ( x i ) ) = ∏ m = 1 M Z m \begin{aligned} \frac{1}{N}\sum_i\exp(-y_if(x_i)) &=\frac{1}{N}\sum_i\exp\Big(-\sum_{m=1}^M\alpha_my_iG_m(x_i)\Big)\\ &=\sum_iw_{1i}\exp\Big(-\sum_{m=1}^M\alpha_my_iG_m(x_i)\Big)\\ &=\sum_iw_{1i}\prod_{m=1}^M\exp\Big(-\alpha_my_iG_m(x_i)\Big)\\ &=Z_1\sum_iw_{2i}\prod_{m=2}^M\exp\Big(-\alpha_my_iG_m(x_i)\Big)\\ &=Z_1Z_2\sum_iw_{3i}\prod_{m=3}^M\exp\Big(-\alpha_my_iG_m(x_i)\Big)\\ &=\dots\\ &=Z_1Z_2\dots Z_{M-1}\sum_iw_{Mi}\exp(-\alpha_My_iG_M(x_i))\\ &=\prod_{m=1}^MZ_m \end{aligned} N1iexp(yif(xi))=N1iexp(m=1MαmyiGm(xi))=iw1iexp(m=1MαmyiGm(xi))=iw1im=1Mexp(αmyiGm(xi))=Z1iw2im=2Mexp(αmyiGm(xi))=Z1Z2iw3im=3Mexp(αmyiGm(xi))==Z1Z2ZM1iwMiexp(αMyiGM(xi))=m=1MZm

在每一轮过程中我们总可以选取合适的 G m G_m Gm使得 Z m Z_m Zm最小,从而使训练误差下降最快.

定理:二分类问题AdaBoost的训练误差界

∏ m = 1 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 ) \prod_{m=1}^MZ_m = \prod_{m=1}^M(2\sqrt{e_m(1-e_m)})=\prod_{m=1}^M\sqrt{(1-4\gamma_m^2)}\leq \exp\big(-2\sum_{m=1}^M\gamma_m^2\big) m=1MZm=m=1M(2em(1em) )=m=1M(14γm2) exp(2m=1Mγm2)
这里 γ m = 1 2 − e m \gamma_m=\frac{1}{2}-e_m γm=21em

证明
Z m = ∑ i = 1 N w m i exp ⁡ ( − α m y i G ( x i ) ) = ∑ y i = G m ( x i ) w m i e − α m + ∑ y i ≠ G m ( x i ) w m i e α m = ( 1 − e m ) e − α m + e m e α = 2 e m ( 1 − e m ) = 1 − 4 γ m 2 \begin{aligned} Z_m &= \sum_{i=1}^N w_{mi}\exp(-\alpha_my_iG(x_i))\\ &=\sum_{y_i=G_m(x_i)}w_{mi}e^{-\alpha_m} + \sum_{y_i\neq G_m(x_i)}w_{mi}e^{\alpha_m}\\ &=(1-e_m)e^{-\alpha_m} + e_me^{\alpha}\\ &=2\sqrt{e_m(1-e_m)}=\sqrt{1-4\gamma_m^2} \end{aligned} Zm=i=1Nwmiexp(αmyiG(xi))=yi=Gm(xi)wmieαm+yi̸=Gm(xi)wmieαm=(1em)eαm+emeα=2em(1em) =14γm2
利用泰勒公式将 e x e^x ex 1 − x \sqrt{1-x} 1x x = 0 x=0 x=0处展开可以推出 1 − 4 γ m 2 ≤ exp ⁡ ( − 2 γ m 2 ) \sqrt{1-4\gamma_m^2}\leq \exp(-2\gamma_m^2) 14γm2 exp(2γm2).

推论
如果存在 γ > 0 \gamma>0 γ>0,对所有 m m m γ m ≥ γ \gamma_m\geq \gamma γmγ,则
1 N ∑ i = 1 N I ( G ( x i ) ≠ y i ) ≤ exp ⁡ ( − 2 M γ 2 ) \frac{1}{N}\sum_{i=1}^NI(G(x_i)\neq y_i)\leq \exp(-2M\gamma^2) N1i=1NI(G(xi)̸=yi)exp(2Mγ2)

由此可以看出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=1Mβmb(x;γm)
其中 b ( x ; γ m ) b(x;\gamma_m) b(x;γm)为基函数, γ m \gamma_m γm为基函数的参数, β m \beta_m βm为基函数的系数.
在给定训练数据及损失函数的条件下,学习加法模型 f ( x ) f(x) f(x)成为经验风险极小化即损失函数极小化问题.
min ⁡ β m , γ m ∑ i = 1 N L ( y i , ∑ m = 1 M β m b ( x i ; γ m ) ) \min_{\beta_m,\gamma_m}\sum_{i=1}^NL\Big(y_i,\sum_{m=1}^M\beta_mb(x_i;\gamma_m)) βm,γmmini=1NL(yi,m=1Mβmb(xi;γm))
前向分步算法求解这一优化问题的想法是:从前向后,每一步只学习一个基函数及其系数,逐步逼近优化目标函数,就可以简化优化的复杂度,每一步只需要优化如下损失函数:
min ⁡ β , γ ∑ i = 1 N L ( y i , β b ( x i ; γ ) ) \min_{\beta,\gamma}\sum_{i=1}^NL(y_i,\beta b(x_i;\gamma)) β,γmini=1NL(yi,βb(xi;γ))
算法

输入
训练数据集T,损失函数 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)

  1. 初始化 f 0 ( x ) = 0 f_0(x)=0 f0(x)=0.
  2. m = 1 , 2 … , M m=1,2\dots,M m=1,2,M
    1. 极小化损失函数
      ( β m , γ m ) = a r g min ⁡ β , γ ∑ i = 1 N L ( y i , f m − 1 ( x i ) + β b ( x i ; γ ) ) (\beta_m,\gamma_m)=arg \min_{\beta,\gamma}\sum_{i=1}^NL(y_i,f_{m-1}(x_i)+\beta b(x_i;\gamma)) (βm,γm)=argβ,γmini=1NL(yi,fm1(xi)+βb(xi;γ))
      得到其参数 β m , γ m \beta_m,\gamma_m βm,γm
    2. 更新
      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)=fm1(x)+βmb(x;γm)
  3. 得到加法模型
    f ( x ) = f M ( x ) = ∑ m = 1 M β m b ( x ; γ m ) f(x) = f_M(x) = \sum_{m=1}^M\beta_mb(x;\gamma_m) f(x)=fM(x)=m=1Mβmb(x;γm)

这样就将同时求解从 m = 1 m=1 m=1到M所有参数 β m , γ m \beta_m,\gamma_m βm,γm的优化问题简化为逐次求解各个 β m , γ m \beta_m,\gamma_m βm,γm的优化问题.

前向分步算法和AdaBoost

定理 AdaBoost算法是前向分步算法的特例,模型是由基本分类器促成的加法模型,损失函数是指数函数.

证明

  1. 显然,当基函数为基本分类器时,该加法模型等价于AdaBoost的最终分类器
    f ( x ) = ∑ m = 1 M α m G m ( x ) f(x) = \sum_{m=1}^M\alpha_mG_m(x) f(x)=m=1MαmGm(x)

  2. 证明AdaBoost的损失函数为指数损失函数.
    L ( y , f ( x ) ) = exp ⁡ ( − y f ( x ) ) L(y,f(x)) = \exp(-yf(x)) L(y,f(x))=exp(yf(x))
    假设已经经过 m − 1 m-1 m1次迭代,得到了 f m − 1 ( x ) f_{m-1}(x) fm1(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 ) f_{m-1}(x) = f_{m-2}(x) + \alpha_{m-1}G_{m-1}(x)=\alpha_1G_1(x) + \dots+\alpha_{m-1}G_{m-1}(x) fm1(x)=fm2(x)+αm1Gm1(x)=α1G1(x)++αm1Gm1(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 − 1 ( x ) f_m(x) = f_{m-1}(x) + \alpha_mG_{m-1}(x) fm(x)=fm1(x)+αmGm1(x)
    目标是使 f m ( x ) f_m(x) fm(x)在训练数据集上的指数损失函数最小
    ( α m , G m ( x ) ) = a r g min ⁡ α , G ∑ i = 1 N exp ⁡ ( − y i ( f m − 1 ( x i ) + α G ( x i ) ) ) = a r g min ⁡ α , G ∑ i = 1 N w ˉ m i exp ⁡ ( − y i α G ( x i ) ) \begin{aligned} (\alpha_m,G_m(x)) &= arg \min_{\alpha,G}\sum_{i=1}^N\exp(-y_i(f_{m-1}(x_i)+ \alpha G(x_i)))\\ &= arg \min_{\alpha,G}\sum_{i=1}^N\bar{w}_{mi}\exp(-y_i\alpha G(x_i)) \end{aligned} (αm,Gm(x))=argα,Gmini=1Nexp(yi(fm1(xi)+αG(xi)))=argα,Gmini=1Nwˉmiexp(yiα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(yifm1(xi)) w ˉ m i \bar{w}_{mi} wˉmi α m , G m \alpha_m,G_m αm,Gm都无关,所以与最小化无关.

现证明使上述代价函数最小的 α m ∗ , G m ∗ ( x ) \alpha_m^*,G_m^*(x) αm,Gm(x)就是AdaBoost算法所得到的 α m \alpha_m αm G m ( x ) G_m(x) Gm(x).

求解可分为两步:

先求解 G m ∗ ( x ) G_m^*(x) Gm(x),对于任意 α > 0 \alpha>0 α>0,使得上式最小的 G ( x ) G(x) G(x)由下式得到:
G m ∗ ( x ) = a r g min ⁡ G ∑ i = 1 N w ˉ m i I ( y i ≠ G ( x i ) ) G_m^*(x)=arg \min_G\sum_{i=1}^N\bar{w}_{mi}I(y_i\neq G(x_i)) Gm(x)=argGmini=1NwˉmiI(yi̸=G(xi))
此分类器即为AdaBoost算法的基本分类器 G m ( x ) G_m(x) Gm(x),因为其使第m轮加权训练数据分类误差率最小.

再求解 α m ∗ \alpha_m^* αm
∑ i = 1 N w ˉ m i exp ⁡ ( − y i α G ( x i ) ) = ∑ y i = G m ( x i ) w ˉ m i e − α + ∑ y i ≠ G m ( x i ) w ˉ m i e α = ( e α − e − α ) ∑ i = 1 N w ˉ m i I ( y i ≠ G ( x i ) ) + e − α ∑ i = 1 N w ˉ m i \begin{aligned} \sum_{i=1}^N\bar{w}_{mi}\exp(-y_i\alpha G(x_i))&=\sum_{y_i=G_m(x_i)}\bar{w}_{mi}e^{-\alpha} + \sum_{y_i\neq G_m(x_i)}\bar{w}_{mi}e^{\alpha}\\ &=(e^{\alpha}- e^{-\alpha})\sum_{i=1}^N\bar{w}_{mi}I(y_i\neq G(x_i))+e^{-\alpha}\sum_{i=1}^N\bar{w}_mi \end{aligned} i=1Nwˉmiexp(yiαG(xi))=yi=Gm(xi)wˉmieα+yi̸=Gm(xi)wˉmieα=(eαeα)i=1NwˉmiI(yi̸=G(xi))+eαi=1Nwˉmi
G m ∗ ( x ) G_m^*(x) Gm(x)代入上式,对 α \alpha α求导等于0,即可得到使损失函数最小的 α \alpha α
α m ∗ = 1 2 log ⁡ 1 − e m e m \alpha_m^* = \frac{1}{2}\log \frac{1-e_m}{e_m} αm=21logem1em
其中 e m e_m em是分类误差率.

最后再看每一轮样本权值的更新,
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)=fm1(x)+αmGm(x)wˉmi=exp(yifm1(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))

参考文献

李航-统计学习方法

你可能感兴趣的:(机器学习)