人工智能里的数学修炼 | AdaBoost的数学原理: 分布更新推导

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

过程:

  1. D 1 ( x ) = 1 / m D_{1}(x) = 1/m D1(x)=1/m ##初始化权值分布
  2. for $ t = 1,2,…,T$ do
  3. h t = φ ( D , D t ) h_{t} = \varphi(D,D_{t}) ht=φ(D,Dt) ##基于分布和数据集训练出一个基学习器
  4. ε 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=PxDt(ht(x)=f(x)) ##估计出这个基学习器的误差
  5. if ε t > 0.5 \varepsilon_{t} > 0.5 εt>0.5 then break
  6. a t = 1 / 2 l n ( ( 1 − ε t ) / ε t ) a_{t} = 1/2ln((1-\varepsilon_{t})/\varepsilon_{t}) at=1/2ln((1εt)/εt); ##确定分类器的权重
  7. 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) ##更新分布
  8. 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(HD)=ExD[ef(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(HD)=eH(x)P(f(x)=1x)+eH(x)P(f(x)=1x)

令上式为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)=1x)P(f(x)=1x)

因此,我们有输出

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)=1x)P(f(x)=1x))

= { 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)=1x)>P(f(x)=1x)1,P(f(x)=1x)<P(f(x)=1x)

这意味着 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(athtDt)=ExDt[ef(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)) =eatPxDt(f(x)=ht(x))+eatPxDt(f(x)=ht(x))
= e − a t ( 1 − ε t ) + e a t ε t = e^{-a_{t}}(1-\varepsilon_{t})+e^{a_{t}}\varepsilon_{t} =eat(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=PxDt(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(athtDt)=eat(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} Ht1 之后样本的分布将进行调整,使下一轮基学习器 h t h_{t} ht 能纠正 H t − 1 H_{t-1} Ht1 的一些错误。理想的 h t h_{t} ht 能纠正 H t − 1 H_{t-1} Ht1 的全部错误,即最小化

ι 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(Ht1+htD)=ExD[ef(x)Ht1(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)}] ExD[ef(x)Ht1(x)ef(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)} ef(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(Ht1+htD)ExD[ef(x)Ht1(x)(1f(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})] =ExD[ef(x)Ht1(x)(1f(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(Ht1+hD)
= 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)] =argmaxhExD[ef(x)Ht1(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)] =argmaxhExD[ExD[ef(x)Ht1]ef(x)Ht1(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}}] ExD[ef(x)Ht1] 表示一个常数。令 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)=ExD[ef(x)Ht1]D(x)ef(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)=argmaxhExD[ExD[ef(x)Ht1]ef(x)Ht1(x)ef(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)] =argmaxhExDt[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)=12(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)=argminhExDt[(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)=ExD[ef(x)Ht]D(x)ef(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)} =ExD[ef(x)Ht]D(x)ef(x)Ht1(x)ef(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)ef(x)atht(x)ExD[ef(x)Ht]ExD[ef(x)Ht1]
这就是Adaboost框架中第七行样本分布的更新公式。

六、更多资源下载

微信搜索“老和山算法指南”获取更多下载链接与技术交流群
在这里插入图片描述
有问题可以私信博主,点赞关注的一般都会回复,一起努力,谢谢支持。

很多小伙伴私信问我有什么好的人工智能方面的学习材料,下面两个关于python的教程我感觉很不错,都是大佬讲课,可以帮助大家快速上手
在这里插入图片描述

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Liangjun_Feng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值