Boosting 是一族可以将弱学习器提升为强学习器的算法。这族算法的工作机制类似:先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多的关注,然后基于调整后的样本分布来训练下一个基学习器;如此重复进行,直至基学习器达到事先指定的值T,最终将这T个基学习器进行加权结合。
Boosting 族算法最著名的代表是AdaBoost
A Decision-Theoretic Generalization of On-Line Learning and an Application to Boosting
我之前写过两篇关于集成学习的文章,其中一篇是专门介绍了AdaBoost的Python实现
机器学习教程 之 Boosting 与 bagging:集成学习框架
机器学习教程 之 集成学习算法: 深入刨析AdaBoost
以及这篇关于GBDT和XGBoost的博客
机器学习教程 之 梯度提升方法:GBDT及其扩展模型XGBoost
机器学习教程 之 梯度提升方法:GBDT处理分类问题
机器学习教程 之 加性模型:GBDT退化为AdaBoost原理
还有一篇关于bagging随机森林的博文
机器学习教程 之 随机森林: 算法及其特征选择原理
这次开这篇博客是作为上一篇博客的补充,会具体的描述AdaBoost框架里公式的理论推导
目录
一、AdaBoost集成算法框架
这里我们先给出AdaBoost的算法框架,再给出框架里公式的具体推导过程
输入:
训练集
D
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
m
,
y
m
)
}
D = \left \{(x_{1},y_{1}),(x_{2},y_{2}),...,(x_{m},y_{m})\right \}
D={(x1,y1),(x2,y2),...,(xm,ym)};
基学习器 $ \varphi$;
训练轮数
T
T
T;
过程:
- D 1 ( x ) = 1 / m D_{1}(x) = 1/m D1(x)=1/m ##初始化权值分布
- for $ t = 1,2,…,T$ do
- h t = φ ( D , D t ) h_{t} = \varphi(D,D_{t}) ht=φ(D,Dt) ##基于分布和数据集训练出一个基学习器
- ε t = P x ∼ D t ( h t ( x ) ≠ f ( x ) ) \varepsilon_{t} = P_{x\sim D_{t}} (h_{t}(\mathbf{x})\neq f(\mathbf{x})) εt=Px∼Dt(ht(x)=f(x)) ##估计出这个基学习器的误差
- if ε t > 0.5 \varepsilon_{t} > 0.5 εt>0.5 then break
- a t = 1 / 2 l n ( ( 1 − ε t ) / ε t ) a_{t} = 1/2ln((1-\varepsilon_{t})/\varepsilon_{t}) at=1/2ln((1−εt)/εt); ##确定分类器的权重
- D t + 1 ( x ) = D t ( x ) ) Z t × { e x p ( − a t ) , i f h t ( x ) = f ( x ) e x p ( a t ) , i f h t ( x ) ≠ f ( x ) D_{t+1}(\mathbf{x}) = \frac{D_{t}(\mathbf{x}))}{Z_{t}}\times\left\{\begin{matrix} exp(-a_{t}),if h_{t}(\mathbf{x})=f(\mathbf{x})\\ exp(a_{t}),if h_{t}(\mathbf{x})\neq f(\mathbf{x})\end{matrix}\right. Dt+1(x)=ZtDt(x))×{exp(−at),ifht(x)=f(x)exp(at),ifht(x)=f(x) ##更新分布
- end for
输出:
H
(
x
)
=
s
i
g
n
(
∑
t
=
1
T
a
t
h
t
(
x
)
)
H(\mathbf{x}) = sign(\sum_{t=1}^{T}a_{t}h_{t}(\mathbf{x}))
H(x)=sign(∑t=1Tatht(x))
二、AdaBoost的数学推导
AdaBoost的数学推导主要是推导出分类器权重和分布的更新公式,也就是上述框架中的第6步和第7步。AdaBoost算法有很多种推导方式,比较容易理解的是基于“加性模型“(additive model),即基学习器的组合
H ( x ) = ∑ t = 1 T a t h t ( x ) H(\mathbf{x}) = \sum_{t=1}^{T}a_{t}h_{t}(\mathbf{x}) H(x)=∑t=1Tatht(x)
来最小化指数损失函数
ι e x p ( H ∣ D ) = E x ∼ D [ e − f ( x ) H ( x ) ] \iota _{exp}(H|D)=E_{\mathbf{x}\sim D}[e^{-f(\mathbf{x})H(\mathbf{x})}] ιexp(H∣D)=Ex∼D[e−f(x)H(x)]
这里说明一下AdaBoost之所以使用指数损失函数而不使用01损失函数,是由于指数损失函数具有更好的数学性质,如连续可微等。现在我们来证明指数损失函数可以作为01损失函数的一个公正的替代函数
三、指数损失函数是01损失函数的替代函数
若 H ( x ) H(\mathbf{x}) H(x) 能令指数损失函数最小化,则考虑其对于 H ( x ) H(\mathbf{x}) H(x) 的偏导
∂ ι e x p ( H ∣ D ) ∂ H ( x ) = − e − H ( x ) P ( f ( x ) = 1 ∣ x ) + e H ( x ) P ( f ( x ) = − 1 ∣ x ) \frac{\partial \iota _{exp}(H|D)}{\partial H(\mathbf{x})} = -e^{-H(\mathbf{x})}P(f(\mathbf{x})=1|\mathbf{x})+e^{H(\mathbf{x})}P(f(\mathbf{x})=-1|\mathbf{x}) ∂H(x)∂ιexp(H∣D)=−e−H(x)P(f(x)=1∣x)+eH(x)P(f(x)=−1∣x)
令上式为0可以有
H ( x ) = 1 2 l n P ( f ( x ) = 1 ∣ x ) P ( f ( x ) = − 1 ∣ x ) H(\mathbf{x}) = \frac{1}{2}ln\frac{P(f(\mathbf{x})=1|\mathbf{x})}{P(f(\mathbf{x})=-1|\mathbf{x})} H(x)=21lnP(f(x)=−1∣x)P(f(x)=1∣x)
因此,我们有输出
s i g n ( H ( x ) ) = s i g n ( 1 2 l n P ( f ( x ) = 1 ∣ x ) P ( f ( x ) = − 1 ∣ x ) ) sign(H(\mathbf{x})) = sign(\frac{1}{2}ln\frac{P(f(\mathbf{x})=1|\mathbf{x})}{P(f(\mathbf{x})=-1|\mathbf{x})}) sign(H(x))=sign(21lnP(f(x)=−1∣x)P(f(x)=1∣x))
= { 1 , P ( f ( x ) = 1 ∣ x ) > P ( f ( x ) = − 1 ∣ x ) − 1 , P ( f ( x ) = 1 ∣ x ) < P ( f ( x ) = − 1 ∣ x ) = \left\{\begin{matrix}1 ,P(f(x)=1|x)>P(f(x)=-1|x)\\ -1 ,P(f(x)=1|x)<P(f(x)=-1|x)\end{matrix}\right. ={1,P(f(x)=1∣x)>P(f(x)=−1∣x)−1,P(f(x)=1∣x)<P(f(x)=−1∣x)
这意味着 s i g n ( H ( x ) ) sign(H(\mathbf{x})) sign(H(x)) 达到了贝叶斯最优错误率。换而言之,若指数损失函数最小化,则分类错误率也将最小化;这说明指数损失函数是分类任务原本01损失函数的一致替代函数
四、分类器权重 a t a_{t} at 的更新公式
在AdaBoost算法中,第一个基分类器 h 1 h_{1} h1 是通过直接将基学习算法用于初始数据分布而得;此后迭代地生成 h t h_{t} ht 和 a t a_{t} at,当基分类器 h t h_{t} ht 基于分布 D t D_{t} Dt 产生后,该基分类器的权重 a t a_{t} at 应当使得 a t h t a_{t}h_{t} atht 最小化指数损失函数
ι
e
x
p
(
a
t
h
t
∣
D
t
)
=
E
x
∼
D
t
[
e
−
f
(
x
)
a
t
h
t
(
x
)
]
\iota _{exp}(a_{t}h_{t}|D_{t}) = E_{\mathbf{x}\sim D_{t}}[e^{-f(\mathbf{x})a_{t}h_{t}(\mathbf{x})}]
ιexp(atht∣Dt)=Ex∼Dt[e−f(x)atht(x)]
=
e
−
a
t
P
x
∼
D
t
(
f
(
x
)
=
h
t
(
x
)
)
+
e
a
t
P
x
∼
D
t
(
f
(
x
)
≠
h
t
(
x
)
)
= e^{-a_{t}} P_{x \sim D_{t}}(f(x)=h_{t}(x))+e^{a_{t}} P_{x \sim D_{t}}(f(x) \neq h_{t}(x))
=e−atPx∼Dt(f(x)=ht(x))+eatPx∼Dt(f(x)=ht(x))
=
e
−
a
t
(
1
−
ε
t
)
+
e
a
t
ε
t
= e^{-a_{t}}(1-\varepsilon_{t})+e^{a_{t}}\varepsilon_{t}
=e−at(1−εt)+eatεt
其中 ε t = P x ∼ D t ( h t ( x ) ≠ f ( x ) ) \varepsilon_{t} = P_{\mathbf{x} \sim D_{t}}(h_{t}(\mathbf{x}) \neq f(\mathbf{x})) εt=Px∼Dt(ht(x)=f(x)),考虑指数损失函数的导数有
∂ ι e x p ( a t h t ∣ D t ) ∂ α t = − e − a t ( 1 − ε t ) + e a t ε t \frac{\partial \iota _{exp}(a_{t}h_{t}|D_{t})}{\partial \alpha_{t}} = -e^{-a_{t}}(1-\varepsilon_{t})+e^{a_{t}}\varepsilon_{t} ∂αt∂ιexp(atht∣Dt)=−e−at(1−εt)+eatεt
令其为0,有
a t = 1 / 2 l n ( ( 1 − ε t ) / ε t ) a_{t} = 1/2ln((1-\varepsilon_{t})/\varepsilon_{t}) at=1/2ln((1−εt)/εt)
这就是上述框架中第六行中的权重更新公式
五、AdaBoost的分布更新公式
AdaBoost算法在获得 H t − 1 H_{t-1} Ht−1 之后样本的分布将进行调整,使下一轮基学习器 h t h_{t} ht 能纠正 H t − 1 H_{t-1} Ht−1 的一些错误。理想的 h t h_{t} ht 能纠正 H t − 1 H_{t-1} Ht−1 的全部错误,即最小化
ι e x p ( H t − 1 + h t ∣ D ) = E x ∼ D [ e − f ( x ) H t − 1 ( x ) + h t ( x ) ] \iota _{exp}(H_{t-1}+h_{t}|D) = E_{\mathbf{x}\sim D}[e^{-f(\mathbf{x})H_{t-1}(\mathbf{x})+h_{t}(x)}] ιexp(Ht−1+ht∣D)=Ex∼D[e−f(x)Ht−1(x)+ht(x)]
= E x ∼ D [ e − f ( x ) H t − 1 ( x ) e − f ( x ) h t ( x ) ] E_{\mathbf{x}\sim D}[e^{-f(\mathbf{x})H_{t-1}(\mathbf{x})}e^{-f(x)h_{t}(x)}] Ex∼D[e−f(x)Ht−1(x)e−f(x)ht(x)]
注意到 f 2 ( x ) = h t 2 ( x ) = 1 f^{2}(\mathbf{x}) = h^{2}_{t}(\mathbf{x})=1 f2(x)=ht2(x)=1, 上式可将 e − f ( x ) h t ( x ) e^{-f(x)h_{t}(x)} e−f(x)ht(x) 泰勒展开为
ι e x p ( H t − 1 + h t ∣ D ) ≃ E x ∼ D [ e − f ( x ) H t − 1 ( x ) ( 1 − f ( x ) h t ( x ) + f 2 ( x ) h t 2 ( x ) 2 ) ] \iota _{exp}(H_{t-1}+h_{t}|D) \simeq E_{\mathbf{x}\sim D}[e^{-f(\mathbf{x})H_{t-1}(\mathbf{x})}(1-f(x)h_{t}(x)+\frac{f^{2}(\mathbf{x})h^{2}_{t}(\mathbf{x})}{2})] ιexp(Ht−1+ht∣D)≃Ex∼D[e−f(x)Ht−1(x)(1−f(x)ht(x)+2f2(x)ht2(x))]
= E x ∼ D [ e − f ( x ) H t − 1 ( x ) ( 1 − f ( x ) h t ( x ) + 1 2 ) ] = E_{\mathbf{x}\sim D}[e^{-f(\mathbf{x})H_{t-1}(\mathbf{x})}(1-f(x)h_{t}(x)+\frac{1}{2})] =Ex∼D[e−f(x)Ht−1(x)(1−f(x)ht(x)+21)]
于是,理想的学习器
h
t
(
x
)
=
a
r
g
m
i
n
h
ι
e
x
p
(
H
t
−
1
+
h
∣
D
)
h_{t}(x) = argmin_{h}\iota _{exp}(H_{t-1}+h|D)
ht(x)=argminhιexp(Ht−1+h∣D)
=
a
r
g
m
a
x
h
E
x
∼
D
[
e
−
f
(
x
)
H
t
−
1
(
x
)
f
(
x
)
h
(
x
)
]
= argmax_{h} E_{\mathbf{x}\sim D}[e^{-f(\mathbf{x})H_{t-1}(\mathbf{x})}f(x)h(x)]
=argmaxhEx∼D[e−f(x)Ht−1(x)f(x)h(x)]
=
a
r
g
m
a
x
h
E
x
∼
D
[
e
−
f
(
x
)
H
t
−
1
(
x
)
E
x
∼
D
[
e
−
f
(
x
)
H
t
−
1
]
f
(
x
)
h
(
x
)
]
= argmax_{h} E_{\mathbf{x}\sim D}[\frac{e^{-f(\mathbf{x})H_{t-1}(\mathbf{x})}}{ E_{\mathbf{x}\sim D}[e^{-f(\mathbf{x})H_{t-1}}]}f(x)h(x)]
=argmaxhEx∼D[Ex∼D[e−f(x)Ht−1]e−f(x)Ht−1(x)f(x)h(x)]
这里的 E x ∼ D [ e − f ( x ) H t − 1 ] E_{\mathbf{x}\sim D}[e^{-f(\mathbf{x})H_{t-1}}] Ex∼D[e−f(x)Ht−1] 表示一个常数。令 D t D_{t} Dt 表示一个分布
D t ( x ) = D ( x ) E x ∼ D [ e − f ( x ) H t − 1 ] e − f ( x ) h ( x ) D_{t}(x) = \frac{D(x)}{ E_{\mathbf{x}\sim D}[e^{-f(\mathbf{x})H_{t-1}}]}e^{-f(x)h(x)} Dt(x)=Ex∼D[e−f(x)Ht−1]D(x)e−f(x)h(x)
根据数学期望的定义,这里等价于令
h
t
(
x
)
=
a
r
g
m
a
x
h
E
x
∼
D
[
e
−
f
(
x
)
H
t
−
1
(
x
)
E
x
∼
D
[
e
−
f
(
x
)
H
t
−
1
]
e
−
f
(
x
)
h
(
x
)
]
h_{t}(x)= argmax_{h} E_{\mathbf{x}\sim D}[\frac{e^{-f(\mathbf{x})H_{t-1}(\mathbf{x})}}{ E_{\mathbf{x}\sim D}[e^{-f(\mathbf{x})H_{t-1}}]}e^{-f(x)h(x)}]
ht(x)=argmaxhEx∼D[Ex∼D[e−f(x)Ht−1]e−f(x)Ht−1(x)e−f(x)h(x)]
=
a
r
g
m
a
x
h
E
x
∼
D
t
[
f
(
x
)
h
(
x
)
]
= argmax_{h}E_{x \sim D_{t}}[f(x)h(x)]
=argmaxhEx∼Dt[f(x)h(x)]
由于 f ( x ) , h ( x ) ϵ { − 1 , 1 } f(x),h(x) \epsilon \left \{ -1,1 \right \} 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)) f(x)h(x)=1−2∣∣(f(x)!=h(x))
则理想的基学习器
h t ( x ) = a r g m i n h E x ∼ D t [ ∣ ∣ ( f ( x ) ≠ h ( x ) ) ] h_{t}(x) = argmin_{h}E_{x\sim D_{t}}[||(f(x) \neq h(x))] ht(x)=argminhEx∼Dt[∣∣(f(x)=h(x))]
由此可见,理想的 h t h_{t} ht 在分布 D t D_{t} Dt 下最小化分类误差。因此,弱分类器将基于分布 D t D_{t} Dt 来训练,且针对 D t D_{t} Dt的分类误差应当小于0.5 。这在一定程度上类似残差逼近的思想。考虑到 D t D_{t} Dt 和 D t + 1 D_{t+1} Dt+1 的关系有
D
t
(
x
)
=
D
(
x
)
E
x
∼
D
[
e
−
f
(
x
)
H
t
]
e
−
f
(
x
)
H
t
(
x
)
D_{t}(x) = \frac{D(x)}{E_{\mathbf{x}\sim D}[e^{-f(\mathbf{x})H_{t}}]}e^{-f(x)H_{t}(x)}
Dt(x)=Ex∼D[e−f(x)Ht]D(x)e−f(x)Ht(x)
=
D
(
x
)
E
x
∼
D
[
e
−
f
(
x
)
H
t
]
e
−
f
(
x
)
H
t
−
1
(
x
)
e
−
f
(
x
)
a
t
h
t
(
x
)
= \frac{D(x)}{E_{\mathbf{x}\sim D}[e^{-f(\mathbf{x})H_{t}}]}e^{-f(x)H_{t-1}(x)}e^{-f(x)a_{t}h_{t}(x)}
=Ex∼D[e−f(x)Ht]D(x)e−f(x)Ht−1(x)e−f(x)atht(x)
=
D
t
(
x
)
e
−
f
(
x
)
a
t
h
t
(
x
)
E
x
∼
D
[
e
−
f
(
x
)
H
t
−
1
]
E
x
∼
D
[
e
−
f
(
x
)
H
t
]
= D_{t}(x)e^{-f(x)a_{t}h_{t}(x)}\frac{E_{\mathbf{x}\sim D}[e^{-f(\mathbf{x})H_{t-1}}]}{E_{\mathbf{x}\sim D}[e^{-f(\mathbf{x})H_{t}}]}
=Dt(x)e−f(x)atht(x)Ex∼D[e−f(x)Ht]Ex∼D[e−f(x)Ht−1]
这就是Adaboost框架中第七行样本分布的更新公式。
六、更多资源下载
微信搜索“老和山算法指南”获取更多下载链接与技术交流群
有问题可以私信博主,点赞关注的一般都会回复,一起努力,谢谢支持。
很多小伙伴私信问我有什么好的人工智能方面的学习材料,下面两个关于python的教程我感觉很不错,都是大佬讲课,可以帮助大家快速上手