AdaBoost是Boosting这类算法中的著名代表,它有多种推导方式,比较容易理解的就是基学习器的线性组合来最小化指数损失函数。

【AdaBoost算法过程】

输入:训练数据集T={(x1,y1),(x2,y2),...,(xN,yN)},其中xi∈X⊆Rn,标记yi∈Y={−1,+1}
输出:最终分类器G(x)
(1)初始化原始训练数据集的权值分布D1;
    D1=(w11,w12,...,w1N),w1i=1N
假设原始训练数据集具有均匀的权值分布

(2)对m=1,2,...,M

①使用具有权值分布Dm的训练数据集学习,得到基分类器Gm(x):X→{−1,+1}

②计算Gm(x)在训练数据集上的分类误差率em
    em=∑i=1NP(Gm(xi)≠yi)=∑Gm(xi)≠yiwmi∑i=1Nwmi=∑i=1NwmiI(Gm(xi)≠yi)
wmi表示第m轮中第i个实例的权值,我们定义分类误差率em为被Gm(x)
误分类的样本对应的权值之和除以所有样本权值之和,由于所有样本权值
之和为1,即∑i=1Nwmi=1,所以em即为∑Gm(xi)≠yiwmi

③计算Gm(x)的系数αm
    αm=12ln1−emem
系数αm表示着对应的基分类器Gm(x)在最终分类器中的重要性,当em≤12时,
αm≥0,并且αm随着em的减小而增大,也就是说分类误差率越小的基分类器
在最终分类器中的作用越大

④更新训练数据集的权值分布Dm+1
    Dm+1=(wm+1,1,wm+1,2,...,wm+1,N)
更新权值分布即更新每一个样本的权重,可以写成下面这种形式:
    wm+1,i=    {wmiZme−αm,Gm(xi)=yiwmiZmeαm,Gm(xi)≠yi
我们也可以把条件项写到式子里,因为yi和Gm(xi)的取值都为−1或+1,也就
是说当Gm(xi)=yi时,yiGm(xi)=1;当Gm(xi)≠yi时,yiGm(xi)=−1
因此上式可以写为:
    wm+1,i=wmiZme−αmyiGm(xi)
上式中的Zm是规范化因子,它使Dm+1成为一个概率分布
    Zm=∑i=1Nwmie−αmyiGm(xi)

(3)对第(2)步中学习到的M个基分类器进行线性组合得到最终分类器
线性组合:f(x)=∑m=1MαmGm(x)
最终分类器:G(x)=sign(f(x))=sign(∑m=1MαmGm(x))

算法过程如下图:
【机器学习】集成学习(二)----AdaBoost算法

【AdaBoost算法的训练误差分析】

AdaBoost算法最基本的性质就是在学习过程中不断减少训练误差,即减少训练数据集上的分类误差率。对于AdaBoost算法来说,其最终分类器的训练误差是有上界的。而对于下界,我们不需要知道。
其训练误差界为:
1N∑i=1NI(G(xi)≠yi)≤1N∑i=1Ne−yif(xi)=∏m=1MZm
1N∑i=1NI(G(xi)≠yi)即N个样本中被误分类的样本个数N,对上式的证明如下:

前半部分:1N∑i=1NI(G(xi)≠yi)≤1N∑i=1Ne−yif(xi)
当G(xi)≠yi时,yif(xi)<0,则e−yif(xi)≥1,由此可得前半部分

后半部分:1N∑i=1Ne−yif(xi)=∏m=1MZm
已知f(xi)=∑m=1MαmGm(xi),Zmwm+1,i=wmie−αmyiGm(xi)
1N∑i=1Ne−yif(xi)=1N∑i=1Ne−∑m=1MαmyiGm(xi)=1N∑i=1N∏m=1Me−αmyiGm(xi)
=∑i=1Nw1i∏m=1Me−αmyiGm(xi)此处我们将1N看成w1i,因为w1i就是均匀的权值分布
=∑i=1Nw1ie−α1yiG1(xi)∏m=2Me−αmyiGm(xi)
(观察∑i=1Nw1ie−α1yiG1(xi)可以发现就等于Z1∑i=1Nw2i)
=Z1∑i=1Nw2i∏m=2Me−αmyiGm(xi)=Z1∑i=1Nw2ie−α2yiG2(xi)∏m=3Me−αmyiGm(xi)
=Z1Z2∑i=1Nw3i∏m=3Me−αmyiGm(xi)
=...=Z1Z2...ZM−1∑i=1NwMie−αMyiGM(xi)=∏m=1MZm

我们根据这样的结论可以在每一轮选取适当的Gm使得Zm最小,从而使训练误差下降最快。注意,这里是只对每一轮的Zm使其最小化,不是对Zm的乘积最小化

对于二类分类的AdaBoost的训练误差界为:
由于Zm=∑i=1Nwmie−αmyiGm(xi)=∑yi=Gm(xi)wmie−αm+∑yi≠Gm(xi)wmieαm
∑yi=Gm(xi)wmi=1−em
∑yi≠Gm(xi)wmi=em
e−αm=e−12ln1−emem=em1−em
eαm=e12ln1−emem=1−emem
所以Zm=2em(1−em),令γm=12−em,则Zm=1−4γm2
因此∏m=1MZm=∏m=1M2em(1−em)=∏m=1M1−4γm2≤e−2∑m=1Mγm2
此处的e−2∑m=1Mγm2是通过ex和1−x在点x=0的泰勒展开式推出的,推导如下:
ex在x=0处泰勒展开:
    ex=1+x+12x2+o(x2)
    e−2γm2=1−2γm2+12(−2γm2)2=1−2γm2+2γm4
1−x在x=0处泰勒展开:
    1−x=1−12x−18x2+o(x2)
    1−4γm2=1−124γm2−18(4γm2)2=1−2γm2−2γm4 
因此1−4γm2≤e−2γm2  
如果存在γ>0,对所有m有γm≥γ,则1N∑i=1NI(G(xi)≠yi)≤e−2Mγ2
在此条件下,我们可以发现AdaBoost的训练误差是以指数速率下降的
     
下一篇会讨论前向分步算法和提升树,其实感觉前向分步算法加基函数线性组合就是一个框架,而AdaBoost算法和提升树都是利用这个框架来实现的。它们的不同点大多在于损失函数,而对于难以优化的损失函数我们会用梯度提升(最速下降的近似方法)来求解,这也就是梯度提升树的由来。

参考文献:《统计学习方法》

相关文章:

  • 2022-01-05
  • 2022-02-18
  • 2021-05-18
  • 2021-06-07
  • 2021-08-16
  • 2021-08-29
  • 2021-05-21
  • 2021-07-02
猜你喜欢
  • 2021-10-05
  • 2021-05-21
  • 2021-05-28
  • 2021-10-18
  • 2021-04-06
  • 2022-12-23
  • 2021-06-29
相关资源
相似解决方案