从前向分步算法推导出AdaBoost

前向分步算法到AdaBoost

前向分步算法与AdaBoost有什么关系呢?除了都属于Boosting的模型,其实AdaBoost是当前向分步算法损失函数为指数损失时的特例。这篇就写一下推导的过程。

前向分步算法 Forward Stagewise Additive Modeling


  1. 初始化 f0(x)=0
  2. 对于 m=1,2,...,M
    (a)

(βm,γm)=argminβ,γi=1NL(yi,fm1(xi)+βb(xi;γ))

(b)

fm(x)=fm1(x)+βmb(x;γm)


前向分步算法的步骤如上,其实我觉得应该翻译成前向分步累加模型更适合。因为最终的决策函数 f(x) 是由一系列的基函数 b(x;γm) 与相应的权值 βm 累加起来的。前向分步指的是,最小化损失函数获取第 m 步的βb(x;γ)时不影响之前已经获取的参数 γ 与系数 β

对于回归问题,前向分步算法的损失函数可以选平方损失,即

L(yi,f(x))=(yif(x))2

所以有

L(yi,fm1(xi)+βb(xi;γ))=(yifm1(xi)βb(xi;γ))2=(rimβb(xi;γ))2

其中 rim=(yifm1(xi)) ,这可以理解成是当前模型的残差,为了获取 βmb(x;γm) ,也就是令其去拟合当前模型的残差。


而AdaBoost是个分类器,对于分类问题,平方损失就不太适合了。所以引入指数损失,即

L(y,f(x))=exp(yf(x))

基本的AdaBoost是一个二分类模型,令其基函数 b(x;γ)=G(x) ,所以有 Gm(x){1,1}
则在指数损失的基础上,就需要解决如下问题

(βm,Gm)=argminβ,Gi=1Nexp[yi(fm1(xi)+βG(xi))]

w(m)i=exp(yifm1(xi)) ,则上述公式可以写成

(βm,Gm)=argminβ,Gi=1Nw(m)iexp(βyiG(xi))

因为 yi{1,1} ,且 yi 要么等于 G(xi) ,要么不等于。所以将上述公式拆成两部分。暂时省略 argmin 之前的部分, exp 简写成 e ,有

eβyi=G(xi)w(m)i+eβyiG(xi)w(m)i

在这基础上再添上两项,有

eβyi=G(xi)w(m)i+eβyiG(xi)w(m)i+eβyiG(xi)w(m)ieβyiG(xi)w(m)i

再进一步合并,得到

(eβeβ)i=1NwiI(yiG(xi))+eβi=1Nw(m)i(1)

对于迭代的第 m 步,假设β为常数,那么公式的右边以及 (eβeβ) 都可以看成常数,则要让损失函数取得最小值,只需要让 Ni=1wiI(yiG(xi)) 取最小值。因此有

Gm=argminGi=1Nw(m)iI(yiG(xi))

那么 βm 怎么求得呢?现在假设 Gm 已知的情况下,回到公式 (1) 。此时的变量为 β ,要让损失函数取得最小值,先对 β 求偏导,得到

Lβ=eβi=1Nw(m)iI(yiG(xi))+eβi=1Nw(m)iI(yiG(xi))eβi=1Nw(m)i

再令 Lβ=0 ,得
eβi=1Nw(m)iI(yiG(xi))=[i=1Nw(m)ii=1Nw(m)iI(yiG(xi))]eβ

对两边同求 log ,得到
logi=1Nw(m)iI(yiG(xi))+logeβ=log[i=1Nw(m)ii=1Nw(m)iI(yiG(xi))]+logeβ

又因为 logeβ=logeβ ,所以有
logeβ=12logNi=1w(m)iNi=1w(m)iI(yiG(xi))Ni=1w(m)iI(yiG(xi))

所以解得
βm=12logNi=1w(m)iNi=1w(m)iI(yiG(xi))Ni=1wiI(yiG(xi))

又因为加权误差率
errm=Ni=1w(m)iI(yiG(xi))Ni=1w(m)i

所以 βm 可以写成
βm=12log1errmerrm

求出了 Gm(x) βm ,就可以写出 f(x) 的更新公式了

fm(x)=fm1(x)+βmGm(x)

根据 w(m)i=exp(yifm1(xi)) ,可以写出 w 的更新公式

w(m+1)i=exp(yifm(xi))=exp(yi(fm1(xi)+βmGm(xi)))=w(m)iexp(βmyiGm(xi))

因为 yi 等于 Gm(xi) 的时候等于1,而不等于的时候等于-1,所以再用一个技巧,令 yiGm(xi)=2I(yiGm(xi))1 ,代入上面的公式,得到

w(m+1)i=exp(yifm(xi))=w(m)iexp2βmI(yiGm(xi))expβm

再令 αm=2βm ,且上式的最右系数 expβm 对所有 wi 都一样,所以可以舍去。这样就得到了

w(m+1)i=w(m)iexpαmI(yiGm(xi))

这就与AdaBoost的样本权值更新公式一样了。
αm=2βm=log1errmerrm 也与AdaBoost的弱分类器系数一样。

到这里也就推导出了当前向分步算法的损失函数选为指数损失的时候,前向分步算法也就是AdaBoost啦。

  • 12
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值