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的算法框架,再给出框架里公式的具体推导过程
输入:
训练集 D={(x1,y1),(x2,y2),...,(xm,ym)} D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) } ;
基学习器 φ φ ;
训练轮数 T T ;
过程:
1. D1(x)=1/m D 1 ( x ) = 1 / m ##初始化权值分布
2. for t=1,2,...,T t = 1 , 2 , . . . , T do
3. ht=φ(D,Dt) h t = φ ( D , D t ) ##基于分布和数据集训练出一个基学习器
4. εt=Px∼Dt(ht(x)≠f(x)) ε t = P x ∼ D t ( h t ( x ) ≠ f ( x ) ) ##估计出这个基学习器的误差
5. if εt>0.5 ε t > 0.5 then break
6. at=1/2ln((1−εt)/εt) a t = 1 / 2 l n ( ( 1 − ε t ) / ε t ) ; ##确定分类器的权重
7. Dt+1(x)=Dt(x))Zt×{exp(−at),ifht(x)=f(x)exp(at),ifht(x)≠f(x) 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 ) ##更新分布
8. end for
输出:
H(x)=sign(∑Tt=1atht(x)) H ( x ) = s i g n ( ∑ t = 1 T a t h t ( x ) )
AdaBoost的数学推导主要是推导出分类器权重和分布的更新公式,也就是上述框架中的第6步和第7步。AdaBoost算法有很多种推导方式,比较容易理解的是基于“加性模型“(additive model),即基学习器的组合
H(x)=∑Tt=1atht(x) H ( x ) = ∑ t = 1 T a t h t ( x )
来最小化指数损失函数
ιexp(H|D)=Ex∼D[e−f(x)H(x)] ι e x p ( H | D ) = E x ∼ D [ e − f ( x ) H ( x ) ]
这里说明一下AdaBoost之所以使用指数损失函数而不使用01损失函数,是由于指数损失函数具有更好的数学性质,如连续可微等。现在我们来证明指数损失函数可以作为01损失函数的一个公正的替代函数
若 H(x) H ( x ) 能令指数损失函数最小化,则考虑其对于 H(x) H ( x ) 的偏导
∂ιexp(H|D)∂H(x)=−e−H(x)P(f(x)=1|x)+eH(x)P(f(x)=−1|x) ∂ ι e x p ( H | D ) ∂ H ( x ) = − e − H ( x ) P ( f ( x ) = 1 | x ) + e H ( x ) P ( f ( x ) = − 1 | x )
令上式为0可以有
H(x)=12lnP(f(x)=1|x)P(f(x)=−1|x) H ( x ) = 1 2 l n P ( f ( x ) = 1 | x ) P ( f ( x ) = − 1 | x )
因此,我们有输出
sign(H(x))=sign(12lnP(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 ) )
={1,P(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 ) − 1 , P ( f ( x ) = 1 | x ) < P ( f ( x ) = − 1 | x )
这意味着 sign(H(x)) s i g n ( H ( x ) ) 达到了贝叶斯最优错误率。换而言之,若指数损失函数最小化,则分类错误率也将最小化;这说明指数损失函数是分类任务原本01损失函数的一致替代函数
在AdaBoost算法中,第一个基分类器 h1 h 1 是通过直接将基学习算法用于初始数据分布而得;此后迭代地生成 ht h t 和 at a t ,当基分类器 ht h t 基于分布 Dt D t 产生后,该基分类器的权重 at a t 应当使得 atht a t h t 最小化指数损失函数
ιexp(atht|Dt)=Ex∼Dt[e−f(x)atht(x)] ι e x p ( a t h t | D t ) = E x ∼ D t [ e − f ( x ) a t h t ( x ) ]
=e−atPx∼Dt(f(x)=ht(x))+eatPx∼Dt(f(x)≠ht(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−at(1−εt)+eatεt = e − a t ( 1 − ε t ) + e a t ε t
其中 εt=Px∼Dt(ht(x)≠f(x)) ε t = P x ∼ D t ( h t ( x ) ≠ f ( x ) ) ,考虑指数损失函数的导数有
∂ιexp(atht|Dt)∂αt=−e−at(1−εt)+eatεt ∂ ι e x p ( a t h t | D t ) ∂ α t = − e − a t ( 1 − ε t ) + e a t ε t
令其为0,有
at=1/2ln((1−εt)/εt) a t = 1 / 2 l n ( ( 1 − ε t ) / ε t )
这就是上述框架中第六行中的权重更新公式
AdaBoost算法在获得 Ht−1 H t − 1 之后样本的分布将进行调整,使下一轮基学习器 ht h t 能纠正 Ht−1 H t − 1 的一些错误。理想的 ht h t 能纠正 Ht−1 H t − 1 的全部错误,即最小化
ιexp(Ht−1+ht|D)=Ex∼D[e−f(x)Ht−1(x)+ht(x)] ι e x p ( H t − 1 + h t | D ) = E x ∼ D [ e − f ( x ) H t − 1 ( x ) + h t ( x ) ]
= Ex∼D[e−f(x)Ht−1(x)e−f(x)ht(x)] E x ∼ D [ e − f ( x ) H t − 1 ( x ) e − f ( x ) h t ( x ) ]
注意到 f2(x)=h2t(x)=1 f 2 ( x ) = h t 2 ( x ) = 1 , 上式可将 e−f(x)ht(x) e − f ( x ) h t ( x ) 泰勒展开为
ιexp(Ht−1+ht|D)≃Ex∼D[e−f(x)Ht−1(x)(1−f(x)ht(x)+f2(x)h2t(x)2)] ι 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 ) ]
=Ex∼D[e−f(x)Ht−1(x)(1−f(x)ht(x)+12)] = E x ∼ D [ e − f ( x ) H t − 1 ( x ) ( 1 − f ( x ) h t ( x ) + 1 2 ) ]
于是,理想的学习器
ht(x)=argminhιexp(Ht−1+h|D) h t ( x ) = a r g m i n h ι e x p ( H t − 1 + h | D )
=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 ) f ( x ) h ( x ) ]
=argmaxhEx∼D[e−f(x)Ht−1(x)Ex∼D[e−f(x)Ht−1]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 ) ]
这里的 Ex∼D[e−f(x)Ht−1] E x ∼ D [ e − f ( x ) H t − 1 ] 表示一个常数。令 Dt D t 表示一个分布
Dt(x)=D(x)Ex∼D[e−f(x)Ht−1]e−f(x)h(x) D t ( x ) = D ( x ) E x ∼ D [ e − f ( x ) H t − 1 ] e − f ( x ) h ( x )
根据数学期望的定义,这里等价于令
ht(x)=argmaxhEx∼D[e−f(x)Ht−1(x)Ex∼D[e−f(x)Ht−1]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 ) ]
=argmaxhEx∼Dt[f(x)h(x)] = a r g m a x h E x ∼ D t [ f ( x ) h ( x ) ]
由于 f(x),h(x)ϵ{−1,1} 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 ) )
则理想的基学习器
ht(x)=argminhEx∼Dt[||(f(x)≠h(x))] h t ( x ) = a r g m i n h E x ∼ D t [ | | ( f ( x ) ≠ h ( x ) ) ]
由此可见,理想的 ht h t 在分布 Dt D t 下最小化分类误差。因此,弱分类器将基于分布 Dt D t 来训练,且针对 Dt D t 的分类误差应当小于0.5 。这在一定程度上类似残差逼近的思想。考虑到 Dt D t 和 Dt+1 D t + 1 的关系有
Dt(x)=D(x)Ex∼D[e−f(x)Ht]e−f(x)Ht(x) D t ( x ) = D ( x ) E x ∼ D [ e − f ( x ) H t ] e − f ( x ) H t ( x )
=D(x)Ex∼D[e−f(x)Ht]e−f(x)Ht−1(x)e−f(x)atht(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 )
=Dt(x)e−f(x)atht(x)Ex∼D[e−f(x)Ht−1]Ex∼D[e−f(x)Ht] = 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 ]
这就是Adaboost框架中第七行样本分布的更新公式。