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