Adaboost是集成学习中最常用的算法之一。该算法是损失函数为指数损失的前向分步加法模型。下面是这一结论的证明过程。
10.3 Forward Stagewise Additive Modeling
- Initialize f0(x) = 0
2.For m =1 to M
a Compute
(βm,γm)=argminβ,γ∑i−1NL(yi,fm−1(xi)+βb(xi;γ))
b set
fm(x)=fm−1(x)+βmb(x;γm)
该算法在每次迭代 m 中求解最优的基函数(basis function) b(x;γm) 和对应的参数 βm 加到当前的函数 fm−1(x) 中,这样就生成了 fm(x) 。前面的函数的权重不会被改变。
对于平方损失函数
L(y,f(x))=(y−f(x))2
L(yi,fm−1(xi)+βb(xi;γ))=(yi−fm−1(xi)−βb(xi;γ))2=(γim−βb(xi;γ))2
其中,
γim=yi−fm−1(xi) 就是当前模型在第i个样本上的残差。因此,对于平方损失函数来说,在每次迭代中拟合当前残差的最优的
βb(xi;γ) 加入到expansion 中。
10.4 Exponential Loss and Adaboost
Adaboost 算法
1.Initialize the observation weights wi=1/N,i=1,2,...,N
2.For m =1 to M
a Fit a classifier Gm(x) to the training data using weights wi
b Compute
errm=∑Ni=1wiI(yi≠Gm(xi))∑Ni=1wi
c Compute
αm=log((1−errm)/errm)
d set
wi→wiexp[αmI(yi=/Gm(xi))]
该算法等价于使用指数损失函数的前向分步加法模型(forward stagewise additive modeling)
L(y,f(x))=exp(−yf(x))
对于adaboost来说基函数是分类器 Gm(x)∈{−1,1} ,使用指数损失,必须先解决如下问题
(βm,Gm)=argminβ,G∑i=1Nexp[−yi(fm−1(xi)+βG(xi))]
即每次迭代时生成的分类器和对应的权重,该问题等价于
(βm,Gm)=argminβ,G∑i=1Nw(m)iexp(−βyiG(xi))(10.9)
其中,
w(m)i=exp(−yifm−1(xi)) .因为
w(m)i 既不依赖
β 又不依赖
G(x) ,它可以看做每个样本的权重。由于该权重依赖于
fm−1(xi) ,所以样本权重在每次迭代时都会变化。
10.分两步解决。
首先,先求 Gm(x) . 对于任何 β>0 ,10.9中的 Gm(x) 为:
Gm=argminG∑i=1Nw(m)iI(yi≠Gm(xi))
即最小化加权错误率的分类器(weighted error rate ).这样10.9可以表示为:
∑i=1Nw(m)iexp(−βyiG(xi))=e−β∑yi=G(xi)w(m)i+eβ∑yi≠G(xi)w(m)i
可以表示为:
e−β∑iNw(m)i−e−β∑yi≠G(xi)w(m)i+eβ∑yi≠G(xi)w(m)i
即
(eβ−e−β)∑i=1Nw(m)iI(yi≠G(xi))+e−β∑i=1Nw(m)i
将
Gm 带入上式,对
β 求导,并令导数为0,即
(eβ−e−β)∑i=1Nw(m)iI(yi≠G(xi))−e−β∑i=1Nw(m)i=0
两边同时除以
e−β
(e2β−1)∑i=1Nw(m)iI(yi≠G(xi))−∑i=1Nw(m)i=0
e2β−1=∑Ni=1w(m)i∑Ni=1w(m)iI(yi≠G(xi))
e2β=∑Ni=1w(m)i∑Ni=1w(m)iI(yi≠G(xi))−1
β=1/2log(∑Ni=1w(m)i∑Ni=1w(m)iI(yi≠G(xi))−1)
根据Adaboost算法中的定义:
errm=∑Ni=1wiI(yi≠Gm(xi))∑Ni=1wi
可以看到
β=1/2log(1errm−1)
αm=2βm 跟Adaboost算法中的c步中的基分类器的权重定义是相同的。
然后有
fm(x)=fm−1(x)+βmGm(x)
根据w的定义 w(m)i=exp(−yifm−1(xi)) .可以得到
w(m+1)i=exp(−yifm(xi))=exp(−yi(fm−1(xi)+βmGm(xi)))=exp(−yifm−1(xi)−yiβmGm(xi)))=exp(−yifm−1(xi))exp(−yiβmGm(xi))=w(m)iexp(−yiβmGm(xi))
根据 −yiGm(xi)=2I(yi≠Gm(xi))−1 上式变成:
w(m+1)i=wmiexp(αmI(yi≠Gm(xi))−βm)
其中,
αm=2βm .由于
exp(βm) 对所有样本都是常数值,所以对权重更新其实没有影响。上面的权重更新和Adaboost算法中的权重更新是一致的。
综上,损失函数是指数函数的前向分步加法模型的基分类器权重和样本权重更新是相同的。
这篇其实是之前看ESL第10章的笔记。Adaboost算法最常用的基础分类器是决策树桩(decision stump)。决策树桩就是只进行一次特征选择而生产两个分支的决策树。根据树的种类可以由很多种实现方式。我在实现时使用的cart分类树,不过特征选择使用的误分类率作为特征选择的标准。