Adaboost是一种经典且重要的boosting集成学习方法。它重点关注在前一轮训练中出错的样本,即为其赋予更高的权重。从而使得下一轮的训练误差更小。Adaboost是加性模型的一个特例。我们先来看一下加性模型。
加性模型(Additive model)
加性模型的预测函数可以写为:
f(x)=∑mi=1wib(x;γi)
其中
b(x;γi)
是基准分类器,
wi
是权重,
γi
是对应基准分类器的参数。
加性模型的通用学习目标为:
min∑ni=1L(yi,f(xi))
→minwi,γi∑ni=1L(yi,∑mi=1wib(x;γi))
。
通常这是一个复杂的优化问题,前向分步算法求解这一优化问题的想法是:从前到后依次学习每个基准分类器的参数和权重,使得这样学习的过程逐步逼近原始的优化目标。
前向分步算法的执行过程如下:
Input:
X={x1,…,xn}∈Rm,Y={y1,…,yn}∈{−1,+1}
.
Loss function:
L(y,f(x))
.
Base classifier set:
{b(x;γi)}mi=1
Output:
wi,γi,i=1,…,m
Initialize f0(x)=0
for j=1:m
w∗j,γ∗j=argmin ∑ni=1L(yi,fj−1(xi)+wjb(xi;γj))
fj(x)=fj−1(x)+w∗jb(x;γ∗j)
fm(x)
即为所求得的加性模型。
Adaboost
为了使得推导简单化,这里假设是二分类问题。
令损失函数为指数损失即:
L(yi,f(xi))=e−yif(xi)
根据加性模型的算法过程,假设已经得到了
f1(x),f2(x),…,fm−1(x)
。我们现在要得到
fm(x)
根据
fm(x)=fm−1(x)+w∗mb(x;γ∗m)
我们知道,只要得到第m轮中的
w∗m,γ∗m
就行了。
有
w∗m,γ∗m=argmin∑ni=1L(yi,fm−1(x)+wmb(xi;γm))
=argmin∑ni=1e−yi[fm−1(x)+wmb(xi;γm)]
=argmin∑ni=1ai,m−1e−yiwmb(xi;γm)
这里
ai,m−1=e−yifm−1(xi)∑nj=1e−yjfm−1(xj)
是第m-1轮得到的第i个样本的权重, 相对于
wm,γm
是一个常数,但它是通过前m-1轮迭代得到的。
针对上述优化目标,我们先求
γ∗m
我们知道
b(x;γm)
是一个基准分类器, 因此
b(x;γm)∈{−1,+1}
。此时,假设
wm
是一个正的常数,那么使得上述优化目标极小的
γm
为
γ∗m=argmin∑ni=1ai,m−1I[b(xi;γm)≠yi]
然后求
w∗m
,即每个样本所占权重
w∗b=argmin∑ni=1ai,m−1e−yiwmb(xi;γ∗m)
=argmin∑yi=b(xi;γ∗m)ai,m−1e−wm+∑yi≠b(xi;γ∗m)ai,m−1ewm
上式对
wm
求导为0可得
w∗m=12log1−emem
,
其中
em=∑yi≠fm−1(xi)ai,m−1
为第前m-1个基准分类器在加权数据上的分类误差。
em
的范围被限制在(0, 1)之间,这是因为我们会在每一轮都对样本权重进行归一化操作,使其成为一个概率分布。即
∑ni=1ai,m−1=1
在得到
w∗m
和
γ∗m
之后,我们也就得到了
fm(x)
,现在我们需要更新样本权重
ai,m
,显然
ai,m=e−yifm(xi)∑nj=1e−yjfm(xj)
其中
e−yifm(xi)=ai,m−1e−yiw∗mb(xi;γ∗i)
梯度提升树
梯度提升树也是一种经典的boosting方法,在加性模型中,当损失函数为指数损失或者是平方损失的时候,每一步的优化都比较简单。对于一般的损失函数而言,有时候并不能得到闭合式解。因此Freidman提出了用损失函数的负梯度近似当前轮的残差。
即
rim≈−∂L(yi,fm(xi))∂fm(xi)
详细的可以参见https://www.cnblogs.com/pinard/p/6140514.html