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)
对于平方损失函数
其中,γ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)
对于adaboost来说基函数是分类器Gm(x)∈{−1,1},使用指数损失,必须先解决如下问题
即每次迭代时生成的分类器和对应的权重,该问题等价于
其中,w(m)i=exp(−yifm−1(xi)).因为w(m)i既不依赖β又不依赖G(x),它可以看做每个样本的权重。由于该权重依赖于fm−1(xi),所以样本权重在每次迭代时都会变化。
10.分两步解决。
首先,先求Gm(x). 对于任何β>0,10.9中的Gm(x)为:
即最小化加权错误率的分类器(weighted error rate ).这样10.9可以表示为:
可以表示为:
即
将Gm带入上式,对β求导,并令导数为0,即
两边同时除以e−β
根据Adaboost算法中的定义:
可以看到
αm=2βm跟Adaboost算法中的c步中的基分类器的权重定义是相同的。
然后有
根据w的定义w(m)i=exp(−yifm−1(xi)).可以得到
根据−yiGm(xi)=2I(yi≠Gm(xi))−1 上式变成:
其中,αm=2βm.由于exp(βm)对所有样本都是常数值,所以对权重更新其实没有影响。上面的权重更新和Adaboost算法中的权重更新是一致的。
综上,损失函数是指数函数的前向分步加法模型的基分类器权重和样本权重更新是相同的。
这篇其实是之前看ESL第10章的笔记。Adaboost算法最常用的基础分类器是决策树桩(decision stump)。决策树桩就是只进行一次特征选择而生产两个分支的决策树。根据树的种类可以由很多种实现方式。我在实现时使用的cart分类树,不过特征选择使用的误分类率作为特征选择的标准。