转载的比较仓促, 公式没有整理好,建议返回原文查看:
http://www.csuldw.com/2016/08/28/2016-08-28-adaboost-algorithm-theory/
Posted on 2016-08-28 19:24 | In ML | | views : 4489
关于Adaboost,在先前的一篇文章里,也介绍过它的步骤与实现,但理论上的推导未曾涉及。虽然Adaboost算法思想通俗易懂,但权值更新公式的由来,想必并非人人皆知。本文着重于从理论层面进一步阐述Adaboost,最终推导出迭代时的样本权值更新公式。
关于本文使用的数学符号的具体解释,见下表:
变量 | 符号 | 描述 |
---|---|---|
训练数据 | (X,Y)(X,Y) | 第ii个样本为(xi,yi)(xi,yi),其中xi=(xi1,xi2,⋯,xid)xi=(xi1,xi2,⋯,xid),yi∈{+1,−1}yi∈{+1,−1} |
错误率 | ee | 第mm个弱分类器的错误率为emem |
分类器的系数 | αα | 第mm个弱分类器的系数为αmαm |
样本权重向量 | DD | 迭代至第mm次时的第ii个样本的权值为Dm,iDm,i,初始阶段,所有样本的权重值均为1N1N |
归一化因子 | ZZ | 迭代至第mm次的的归一化因子为ZmZm |
组合分类器 | f(x) | 迭代至第mm次的组合分类器为fm(x)fm(x) |
最终分类器 | G(X) | 最终分类器为G(X)=sign(fM(x))G(X)=sign(fM(x)) |
下面来看看Adaboost的算法思想与其权值的推导。
关于Adaboost,它是boosting算法,从bias-variance(偏差-方差)的角度来看,boosting算法主要关注的是降低偏差。仔细想想便可理解,因为boosting算法每个分类器都是弱分类器,而弱分类器的特性就是high-bias & low variance(高偏差-低方差),其与生俱来的优点就是泛化性能好。因此,将多个算法组合起来之后,可以达到降偏差的效果,进而得到一个偏差小、方差小的泛化能力好的模型。另外,Adaboost的损失函数是指数损失L(y,f(x))=e−yf(x)L(y,f(x))=e−yf(x)。为了掌握Adaboost的整个流程,我将其思想通过下图简单的进行了一番总结(由于此图是我使用LaTex编辑的,所以如有表达不妥的地方,还请读者指出):
图一 Adaboost 算法
Adaboost算法可以归纳至三步,如下:
对于上面给出的算法,可能会存在一些疑问,诸如:
对于第一点,应该比较容易理解,因为如果弱学习器的效果都没有随机猜测好,那么学习得到的模型毫无疑问肯定是无用的。事实上,在上面三个问题中,最让人不解的应该是这个αα的取值。为什么它会是这种(1)(1)形式呢?下面我们一起来推导一下。
从图一我们可以看到,迭代至第mm次时,分类器的系数计算公式为:
αm=12ln(1−emem)(1)(1)αm=12ln(1−emem)
然而,为何会是它呢?其推导方式有两种,第一种是最小化训练误差界进行推导;第二种是最小化损失函数进行推导。两者在本质上是一样的,都是为了求最小化某个式子时的αα值。在下面的篇章中,只涉及第一种。也就是为了确定αα的表达式,根据训练误差界来逐步推导。
从图一可知,最终得到的函数表达式是G(x)G(x),然而,当G(xi)≠yiG(xi)≠yi时,yifM(xi)<0yifM(xi)<0,从而得到e−yifM(xi)≥1e−yifM(xi)≥1,进而可以得到:
1N∑i=1NI(G(xi)≠yi)≤1N∑ie−yifM(xi)(2)(2)1N∑i=1NI(G(xi)≠yi)≤1N∑ie−yifM(xi)
从图一中还可以看到,更新训练样本的权值分布公式如下:
Dm+1,i=Dm,iZm⋅exp{−αmyiGm(xi)}(3)(3)Dm+1,i=Dm,iZm⋅exp{−αmyiGm(xi)}
现在,对权值更新公式(3)(3)变形,得到下列式子:
ZmDm+1,i=Dm,i⋅exp{−αmyiGm(xi)}(4)(4)ZmDm+1,i=Dm,i⋅exp{−αmyiGm(xi)}
对于上面这个式子,非常重要,是下面这个推导的核心。对于公式(2)(2)不等于的右式,我们可以做如下推导:
1N∑ie−yifM(xi)=1N∑iexp(−∑m=1MαmyiGm(xi))=D1,i=1N∑iD1,i∏m=1Mexp(−αmyiGm(xi))=(4)∑iZ1D2,i∏m=2Mexp(−αmyiGm(xi))=(4)Z1⋅∑iZ2D3,i∏m=3Mexp(−αmyiGm(xi))=(4)Z1Z2⋅∑iZ3D4,i∏m=4Mexp(−αmyiGm(xi))=∏m=1MZm1N∑ie−yifM(xi)=1N∑iexp(−∑m=1MαmyiGm(xi))=D1,i=1N∑iD1,i∏m=1Mexp(−αmyiGm(xi))=(4)∑iZ1D2,i∏m=2Mexp(−αmyiGm(xi))=(4)Z1⋅∑iZ2D3,i∏m=3Mexp(−αmyiGm(xi))=(4)Z1Z2⋅∑iZ3D4,i∏m=4Mexp(−αmyiGm(xi))=∏m=1MZm
因此可以得出,Adaboost的误差界为
1N∑i=1NI(G(xi)≠yi)≤1N∑ie−yifM(xi)=∏m=1MZm(5)(5)1N∑i=1NI(G(xi)≠yi)≤1N∑ie−yifM(xi)=∏m=1MZm
从公式(6)(6)可以看出,在每一轮生成弱分类器Gm(x)Gm(x)时,应使归一化因子ZmZm尽可能的小,而最小化时的αα就是我们要求的αα, 即求优化表达式minαm Zm(αm)minαm Zm(αm)。
将问题转化为求最小值,这就比较简单了,只需要对ZmZm求αmαm的导数,然后令导数为零,求出此时的αmαm就好了。OK,下面给出计算过程如下:
Zm=∑i=1NDm,i⋅exp{−αyiGm(xi)}=∑Gm(xi)=yiDm,i⋅e−αm+∑Gm(xi)≠yiDm,i⋅eαm=(1−em)⋅e−αm+em⋅eαm(6)(6)Zm=∑i=1NDm,i⋅exp{−αyiGm(xi)}=∑Gm(xi)=yiDm,i⋅e−αm+∑Gm(xi)≠yiDm,i⋅eαm=(1−em)⋅e−αm+em⋅eαm
∂Zm∂αm=−(1−em)⋅e−αm+em⋅eαm(7)(7)∂Zm∂αm=−(1−em)⋅e−αm+em⋅eαm
然后令导数式(7)(7)等于00,简单的进行化简即可求得(1)(1)式。
说明:对于(6)(6)式的变形,从第一步变换为第二步时,应用的规则是,当样本被正确分类,yiGm(xi)=1yiGm(xi)=1;当样本被错误分类,yiGm(xi)=−1yiGm(xi)=−1。而从第二步到第三步,则可以理解为正确分类的样本所占比例为1−em1−em,错误分类的样本占比emem。
通过上面的推导,得到αα之后,根据(1)(1)式,又可以化简得到正确分类时的e−αme−αm 和错误分类时的eαmeαm ,公式如下:
e−αm=e−12ln(1−emem)=em1−em−−−−−−√ (8)(8)e−αm=e−12ln(1−emem)=em1−em
eαm=e12ln(1−emem)=1−emem−−−−−−√(9)(9)eαm=e12ln(1−emem)=1−emem
而对于归一化因子ZmZm,又可以通过αα推导其与错误率ee的关系,推导过程如下:
Zm=∑i=1NDm,i⋅exp{−αyiGm(xi)}=∑Gm(xi)=yiDm,i⋅e−αm+∑Gm(xi)≠yiDm,i⋅eαm=(1−em)⋅e−αm+em⋅eαm=(8)(9)(1−em)⋅em1−em−−−−−−√+em⋅1−emem−−−−−−√=2em(1−em)−−−−−−−−−√(10)(10)Zm=∑i=1NDm,i⋅exp{−αyiGm(xi)}=∑Gm(xi)=yiDm,i⋅e−αm+∑Gm(xi)≠yiDm,i⋅eαm=(1−em)⋅e−αm+em⋅eαm=(8)(9)(1−em)⋅em1−em+em⋅1−emem=2em(1−em)
因此,根据(10)(10)式的推导结果,可以进一步得到,当样本被正确分类时,yiGm(xi)=1yiGm(xi)=1,权值公式可更新为:
exp{−αmyiGm(xi)}Zm=e−αmZm=(9)(10)em1−em−−−−−−√⋅12em(1−em)−−−−−−−−−√=12(1−em)(11)(11)exp{−αmyiGm(xi)}Zm=e−αmZm=(9)(10)em1−em⋅12em(1−em)=12(1−em)
当样本被错误分类时,yiGm(xi)=−1yiGm(xi)=−1,权值公式可更新为:
exp{−αmyiGm(xi)}Zm=eαmZm=(9)(10)1−emem−−−−−−√⋅12em(1−em)−−−−−−−−−√=12em(12)(12)exp{−αmyiGm(xi)}Zm=eαmZm=(9)(10)1−emem⋅12em(1−em)=12em
公式(11)(11)与公式(12)(12)就是最终的权值更新系数,只需将其带入到公式(3)(3)即可求得新的样本权值。
本文主要侧重于权值的推导,而编写这篇博文的目的主要是为了弥补先前学习过程中的疏忽与不足,进而达到学习的目的。关于文章的实现,可去博主的github下载源码csuldw-Adaboost (各位同学,记得给个star噢^_^),另外,也可参考先前的博文Machine Learning algorithm - Adaboost。关于机器学习的其它文章,本博客将会持续更新。
#Machine Learning #Adaboost #权值 #boosting