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