AdaBoost

人走茶凉 提交于 2020-02-01 21:39:15

1. 提升方法的基本思路

        提升方法基于这样一种思想:对于一个复杂任务来说,将多个专家的判断进行适当的综合所得出的判断,要比其中任何一个专家单独的判断好。实际上,就是“三个臭皮匠顶个诸葛亮”的道理。
        对于分类问题而言,给定一个训练样本集,求比较粗糙的分类规则(弱分类器)要比求精确的分类器(强分类器)容易得多。提升方法就是从弱学习算法出发,反复学习,得到一系列弱分类器(又称基本分类器),然后组合这些弱分类器,构成一个强分类器。大多数的提升方法都是改变训练数据的概率分布(训练数据的权值分布),针对不同的训练数据分布调用弱学习算法学习一系列弱分类器。
        这样,对提升方法来说,有两个问题需要回答:一是在每一轮如何改变训练数据权值或概率分布;而是如何将弱分类器组合成一个强分类器。关于一个问题,AdaBoost的做法是,提高那些被前一轮分类器错误分类样本的权值,而降低那些被正确分类样本的权值。这样一来,那些没有得到正确分类的数据,由于其权值的增大而受到后一轮的弱分类器的更大关注。于是,分类问题被一系列的弱分类器“分而治之”。置于第二个问题,即弱分类器的组合,AdaBoost采取加权多数表决的方法,具体地,加大分类误差率小的弱分类器的权值,使其在表决中起较大的作用;减小分类误差率大额弱分类器的权值,使其在表决中起较小的作用。
        AdaBoost的巧妙之处就在于它将这些想法自然且有效地实现在一种算法里。

2. AdaBoost算法

Input:假设给定一个二分类的训练数据集 T={(x1,y1),(x2,y2),,(xN,yN)}T=\{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\},其中xiRnyi{+1,1}x_i \in \R^n,y_i\in \{+1,-1\}

Output:最终分类器 G(x)G(x)

Procedure
    (1)初始化训练数据的权值分布D1=(w11,w12,,w1n),w1i=1N,i=1,2,,ND_1=(w_{11},w_{12},\cdots,w_{1n}),\quad w_{1i}=\frac{1}{N},\quad i=1,2,\cdots,N    (2)for m=1,2,,Mm=1,2,\cdots,Mrepeat

            (a)从具有权值分布 DmD_m 的训练数据集中采样 NN 个样本学习,得到基本分类器Gm(x):x{+1,1}G_m(x):x\rightarrow \{+1,-1\}            (b)计算 Gm(x)G_m(x) 在训练数据集上的分类误差率em=i=1NP(Gm(xi)yi)=i=1NwmiI[Gm(xi)yi]=i=1Gm(xi)yiNwmi\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}            (c)计算加权错误率,即 Gm(x)G_m(x) 的系数αm=12ln1emem\alpha_m = \frac{1}{2} \ln\frac{1-e_m}{e_m}            (d)更新训练数据集的权值分布Dm+1=(wm+1,1,wm+1,2,,wm+1,N)wm+1,i=wmiZmeαmyiGm(xi)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}               这里 ZmZ_m 是规范化因子Zm=i=1NwmieαmyiGm(xi)Z_m=\displaystyle\sum_{i=1}^{N}{w_{mi}}\Large{e ^{-\alpha_m y_iG_m(x_i)}}    (3)构建基本分类器的线性组合f(x)=m=1MαmGm(x)f(x)=\sum_{m=1}^{M}\alpha_mG_m(x)     得到最终分类器G(x)=sign(f(x))=sign(m=1MαmGm(x))\begin{aligned}G(x)=sign\big(f(x)\big)=sign\bigg(\sum_{m=1}^{M}\alpha_mG_m(x)\bigg)\end{aligned}

  • 给训练数据集加权值是因为每次训练的 NN 个数据都是有放回的抽取数据样本,允许重复抽取
  • em<12\large e_m\lt\displaystyle\frac{1}{2} ,因为你要是误分率 80%80\%的话和误分率 20%20\% 没区别,取反就行了,因此,αm0\large\alpha_m\ge0

3. AdaBoost训练误差的有界性

AdaBoost算法最终分类器的训练误差定义为 E=1Ni=1NI(G(xi)yi)E=\displaystyle\frac{1}{N}\sum_{i=1}^{N}I\Big(G(x_i)\ne y_i\Big)

G(xi)yiG(x_i)\ne y_i 时,yif(xi)<0y_i f(x_i)\lt0,故eyif(xi)1\displaystyle \large e^{\large-y_if(x_i)}\ge1,即E1Ni=1Neyif(xi)=1Ni=1Neyim=1MαmGm(xi)=i=1Nw1im=1MeαmyiGm(xi)\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}

这里是代入f(xi)\large f(x_i)的公式,以及指数计算的性质将累加化成累乘,另外 w1i=1N\large w_{1i}=\displaystyle\frac{1}{N}

从算法过程可知 wmieαmyiGm(xi)=Zmwm+1,i,Zm=i=1NwmieαmyiGm(xi)\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)}},因此i=1Nw1im=1MeαmyiGm(xi)=i=1N[w1ieαmy1Gm(x1)]m=2MeαmyiGm(xi)=Z1i=1Nw2,im=2MeαmyiGm(xi)==Z1Z2ZM1i=1NwM,ieαMyiGM(xi)=m=1MZm\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}
至此,我们得到 Em=1MZm\displaystyle E\le\prod_{m=1}^{M}Z_m,所以,证明训练误差有界转化为证明 ZmZ_m 有界,首先看一下,ZmZ_m表达式详细写出来是什么:Zm=i=1NwmieαmyiGm(xi)=i=1yi=Gm(xi)Nwmieαm+i=1yiGm(xi)Nwmieα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}又已知 i=1Nwmi=1em=i=1Gm(xi)yiNwmieαm=1emem\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}},所以可知
Zm=(1em)eαm+emeαm=2em(1em)em+1em=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

基本不等式:aba+b2\large\displaystyle \sqrt{ab}\le \frac{a+b}{2}

综上所述,Em=1MZm1E\le \displaystyle\prod_{m=1}^M Z_m\le 1,故AdaBoost算法训练误差有界。

这里另外再提一句,随着 MM 的增大,EE 的值会快速下降。这是因为em(0,12)\displaystyle e_m\in(0,\frac{1}{2})Zm1Z_m实际上是小于1,取不到等号,故 MM 每增加 11EE 都要乘以一个小于 11 的数,当然会不断缩小了。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!