零、写在前面
参考资料:
- 《机器学习》周志华
本文记录了Adabooost算法的推导过程,不是Adaboost的教程。如果之前没有接触过Adaboost,我保证读者看完本文后一定学不会Adaboost算法。
一、推导
1. 为什么指数损失函数可以作为优化目标
首先说明我们使用的符号:
符号 | 含义 |
---|---|
T | 基学习器个数 |
h | 基学习器 |
α α | 不同基学习器的权重 |
H | 集成学习器 |
f(·) | 真实函数(算法要学习的函数) |
D | 训练样本的分布 |
E | 期望 |
l l | 损失函数 |
Adaboost算法是要将T个弱学习器h(x)(决策树桩或神经网络等)加权结合结合成一个集成学习器H(x):
这是指数损失函数:
我们要证明,令这一损失函数最小化,能使得集成学习的效果最优。
求函数极小值点,最简单的是另其偏导数为零。指数损失函数中,f(x)是真实函数,不是变量,所以我们仅需令其对H(x)的偏导为零:
解得:
等式两边加sign函数(正值得1,负值为-1)
当 P( f(x) = 1 |x) > P( f(x) = -1 |x),即H(x)预测值为1时,上式值为1,反之预测值为-1时,上式值为-1
故
上式由指数损失函数最小化推导而来,即指数损失函数最小化等价于 argmax P(f(x)=y|x) a r g m a x P ( f ( x ) = y | x ) ,显然指数损失函数可以作为等价的优化目标。而之所以要使用指数损失函数,是因为其良好的数学性质。
推导过程:
指数损失函数->求偏导数->偏导数置为零->化简->加sign函数
2.权重 α α 的更新公式
t时刻,当基分类器
ht
h
t
基于样本分布
Dt
D
t
学习产生后,我们要为这个学习器分配一个权重
αt
α
t
,分配的目的是:配合
ht
h
t
的特性,要最小化指数损失函数:
其中:
- Ht H t 表示这一步的集成学习器
- ||(·)为指示函数,自变量为真时值为1,假时为0
- 第四个等号是考虑到预测值为真时,f(x)和h(x)同号
- 错误率 ϵt=Px∼Dt(ht(x)≠f(x)) ϵ t = P x ∼ D t ( h t ( x ) ≠ f ( x ) )
对于这时的指数损失函数求偏导数:
令其为零,解得
这就是Adaboost每一步权重的更新公式。
3. 样本分布更新公式
Adaboost学习的t时刻,我们已有了
Ht−1
H
t
−
1
,要产生
ht
h
t
。我们希望这一时间步之后的学习器
Ht=Ht−1+ht
H
t
=
H
t
−
1
+
h
t
能够修正之前的错误,即最小化指数损失函数:
其中:
第四个等号对 e−f(x)ht e − f ( x ) h t 做了二阶泰勒展开
第五个等号是由于f(x)和h(x)都只能取 ±1 ± 1
回过头来,我们要
ht(x)
h
t
(
x
)
最小化指数损失函数,我们可以去掉上式中的一些常量:
其中:
第四个等号去掉一个负号,并将argmin更为argmax
第五个等号加上一个分母 Ex∼D[e−f(x)Ht−1] E x ∼ D [ e − f ( x ) H t − 1 ] ,是上一时间步的损失函数,是常量、定值。
下面这一步我没搞懂=.=,可能是概率论还没有学?
令上式中
e−f(x)Ht−1Ex∼D[e−f(x)Ht−1]=Dt(x)D(x)
e
−
f
(
x
)
H
t
−
1
E
x
∼
D
[
e
−
f
(
x
)
H
t
−
1
]
=
D
t
(
x
)
D
(
x
)
(D为分布)
将上式代入上上式,“由数学期望的定义”,
再一次,f(x)和h(x)都只能取
±1
±
1
,故可以有
f(x)h(x)=1−2||(f(x)≠h(x))
f
(
x
)
h
(
x
)
=
1
−
2
|
|
(
f
(
x
)
≠
h
(
x
)
)
将上式代入上上式,
很明显,最后一个等式达到了我们想要的效果。现在我们再回过头看神秘的 e−f(x)Ht−1Ex∼D[e−f(x)Ht−1]=Dt(x)D(x) e − f ( x ) H t − 1 E x ∼ D [ e − f ( x ) H t − 1 ] = D t ( x ) D ( x ) :
其中,第五个等号是将与
e−f(x)Ht−1Ex∼D[e−f(x)Ht−1]=Dt(x)D(x) e − f ( x ) H t − 1 E x ∼ D [ e − f ( x ) H t − 1 ] = D t ( x ) D ( x )
等价的
D(x)e−f(x)Ht−1=Dt(x)Ex∼D[e−f(x)Ht−1] D ( x ) e − f ( x ) H t − 1 = D t ( x ) E x ∼ D [ e − f ( x ) H t − 1 ] 代入得到。
至此,我们完成了Adaboost算法的所有推导。