前向分步算法到AdaBoost
前向分步算法与AdaBoost有什么关系呢?除了都属于Boosting的模型,其实AdaBoost是当前向分步算法损失函数为指数损失时的特例。这篇就写一下推导的过程。
前向分步算法 Forward Stagewise Additive Modeling
- 初始化 f0(x)=0
- 对于
m=1,2,...,M
(a)
(b)
前向分步算法的步骤如上,其实我觉得应该翻译成前向分步累加模型更适合。因为最终的决策函数
f(x)
是由一系列的基函数
b(x;γm)
与相应的权值
βm
累加起来的。前向分步指的是,最小化损失函数获取第
m
步的
对于回归问题,前向分步算法的损失函数可以选平方损失,即
所以有
其中 rim=(yi−fm−1(xi)) ,这可以理解成是当前模型的残差,为了获取 βmb(x;γm) ,也就是令其去拟合当前模型的残差。
而AdaBoost是个分类器,对于分类问题,平方损失就不太适合了。所以引入指数损失,即
基本的AdaBoost是一个二分类模型,令其基函数
b(x;γ)=G(x)
,所以有
Gm(x)∈{−1,1}
。
则在指数损失的基础上,就需要解决如下问题
令 w(m)i=exp(−yifm−1(xi)) ,则上述公式可以写成
因为
yi∈{−1,1}
,且
yi
要么等于
G(xi)
,要么不等于。所以将上述公式拆成两部分。暂时省略
argmin
之前的部分,
exp
简写成
e
,有
在这基础上再添上两项,有
再进一步合并,得到
对于迭代的第
m
步,假设
那么 βm 怎么求得呢?现在假设 Gm 已知的情况下,回到公式 (1) 。此时的变量为 β ,要让损失函数取得最小值,先对 β 求偏导,得到
再令 ∂L∂β=0 ,得
对两边同求 log ,得到
又因为 loge−β=−logeβ ,所以有
所以解得
又因为加权误差率
所以 βm 可以写成
求出了
Gm(x)
与
βm
,就可以写出
f(x)
的更新公式了
根据
w(m)i=exp(−yifm−1(xi))
,可以写出
w
的更新公式
因为 yi 等于 Gm(xi) 的时候等于1,而不等于的时候等于-1,所以再用一个技巧,令 −yiGm(xi)=2I(yi≠Gm(xi))−1 ,代入上面的公式,得到
再令
αm=2βm
,且上式的最右系数
exp−βm
对所有
wi
都一样,所以可以舍去。这样就得到了
这就与AdaBoost的样本权值更新公式一样了。
而 αm=2βm=log1−errmerrm 也与AdaBoost的弱分类器系数一样。
到这里也就推导出了当前向分步算法的损失函数选为指数损失的时候,前向分步算法也就是AdaBoost啦。