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