人工智能里的数学修炼 | AdaBoost的数学原理: 分布更新推导
2018-03-18 21:01
417 查看
Boosting 是一族可以将弱学习器提升为强学习器的算法。这族算法的工作机制类似:先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多的关注,然后基于调整后的样本分布来训练下一个基学习器;如此重复进行,直至基学习器达到事先指定的值T,最终将这T个基学习器进行加权结合。
Boosting 族算法最著名的代表是AdaBoost
A Decision-Theoretic Generalization of On-Line Learning and an Application to Boosting
我之前写过两篇关于集成学习的文章,其中一篇是专门介绍了AdaBoost的Python实现
机器学习教程 之 Boosting 与 bagging:集成学习框架
机器学习教程 之 集成学习算法: 深入刨析AdaBoost
这次开这篇博客是作为上一篇博客的补充,会具体的描述AdaBoost框架里公式的理论推导
输入:
训练集 D={(x1,y1),(x2,y2),...,(xm
20000
,ym)}D={(x1,y1),(x2,y2),...,(xm,ym)};
基学习器 φφ;
训练轮数 TT;
过程:
1. D1(x)=1/mD1(x)=1/m ##初始化权值分布
2. for t=1,2,...,Tt=1,2,...,T do
3. ht=φ(D,Dt)ht=φ(D,Dt) ##基于分布和数据集训练出一个基学习器
4. εt=Px∼Dt(ht(x)≠f(x))εt=Px∼Dt(ht(x)≠f(x)) ##估计出这个基学习器的误差
5. if εt>0.5εt>0.5 then break
6. at=1/2ln((1−εt)/εt)at=1/2ln((1−εt)/εt); ##确定分类器的权重
7. Dt+1(x)=Dt(x))Zt×{exp(−at),ifht(x)=f(x)exp(at),ifht(x)≠f(x)Dt+1(x)=Dt(x))Zt×{exp(−at),ifht(x)=f(x)exp(at),ifht(x)≠f(x) ##更新分布
8. end for
输出:
H(x)=sign(∑Tt=1atht(x))H(x)=sign(∑t=1Tatht(x))
H(x)=∑Tt=1atht(x)H(x)=∑t=1Tatht(x)
来最小化指数损失函数
ιexp(H|D)=Ex∼D[e−f(x)H(x)]ιexp(H|D)=Ex∼D[e−f(x)H(x)]
这里说明一下AdaBoost之所以使用指数损失函数而不使用01损失函数,是由于指数损失函数具有更好的数学性质,如连续可微等。现在我们来证明指数损失函数可以作为01损失函数的一个公正的替代函数
∂ιexp(H|D)∂H(x)=−e−H(x)P(f(x)=1|x)+eH(x)P(f(x)=−1|x)∂ιexp(H|D)∂H(x)=−e−H(x)P(f(x)=1|x)+eH(x)P(f(x)=−1|x)
令上式为0可以有
H(x)=12lnP(f(x)=1|x)P(f(x)=−1|x)H(x)=12lnP(f(x)=1|x)P(f(x)=−1|x)
因此,我们有输出
sign(H(x))=sign(12lnP(f(x)=1|x)P(f(x)=−1|x))sign(H(x))=sign(12lnP(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))sign(H(x)) 达到了贝叶斯最优错误率。换而言之,若指数损失函数最小化,则分类错误率也将最小化;这说明指数损失函数是分类任务原本01损失函数的一致替代函数
ιexp(atht|Dt)=Ex∼Dt[e−f(x)atht(x)]ιexp(atht|Dt)=Ex∼Dt[e−f(x)atht(x)]
=e−atPx∼Dt(f(x)=ht(x))+eatPx∼Dt(f(x)≠ht(x))=e−atPx∼Dt(f(x)=ht(x))+eatPx∼Dt(f(x)≠ht(x))
=e−at(1−εt)+eatεt=e−at(1−εt)+eatεt
其中 εt=Px∼Dt(ht(x)≠f(x))εt=Px∼Dt(ht(x)≠f(x)),考虑指数损失函数的导数有
∂ιexp(atht|Dt)∂αt=−e−at(1−εt)+eatεt∂ιexp(atht|Dt)∂αt=−e−at(1−εt)+eatεt
令其为0,有
at=1/2ln((1−εt)/εt)at=1/2ln((1−εt)/εt)
这就是上述框架中第六行中的权重更新公式
ιexp(Ht−1+ht|D)=Ex∼D[e−f(x)Ht−1(x)+ht(x)]ιexp(Ht−1+ht|D)=Ex∼D[e−f(x)Ht−1(x)+ht(x)]
= Ex∼D[e−f(x)Ht−1(x)e−f(x)ht(x)]Ex∼D[e−f(x)Ht−1(x)e−f(x)ht(x)]
注意到 f2(x)=h2t(x)=1f2(x)=ht2(x)=1, 上式可将 e−f(x)ht(x)e−f(x)ht(x) 泰勒展开为
ιexp(Ht−1+ht|D)≃Ex∼D[e−f(x)Ht−1(x)(1−f(x)ht(x)+f2(x)h2t(x)2)]ιexp(Ht−1+ht|D)≃Ex∼D[e−f(x)Ht−1(x)(1−f(x)ht(x)+f2(x)ht2(x)2)]
=Ex∼D[e−f(x)Ht−1(x)(1−f(x)ht(x)+12)]=Ex∼D[e−f(x)Ht−1(x)(1−f(x)ht(x)+12)]
于是,理想的学习器
ht(x)=argminhιexp(Ht−1+h|D)ht(x)=argminhιexp(Ht−1+h|D)
=argmaxhEx∼D[e−f(x)Ht−1(x)f(x)h(x)]=argmaxhEx∼D[e−f(x)Ht−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)]=argmaxhEx∼D[e−f(x)Ht−1(x)Ex∼D[e−f(x)Ht−1]f(x)h(x)]
这里的Ex∼D[e−f(x)Ht−1]Ex∼D[e−f(x)Ht−1] 表示一个常数。令 DtDt 表示一个分布
Dt(x)=D(x)Ex∼D[e−f(x)Ht−1]e−f(x)h(x)Dt(x)=D(x)Ex∼D[e−f(x)Ht−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)]ht(x)=argmaxhEx∼D[e−f(x)Ht−1(x)Ex∼D[e−f(x)Ht−1]e−f(x)h(x)]
=argmaxhEx∼Dt[f(x)h(x)]=argmaxhEx∼Dt[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))]ht(x)=argminhEx∼Dt[||(f(x)≠h(x))]
由此可见,理想的 htht 在分布 DtDt 下最小化分类误差。因此,弱分类器将基于分布 DtDt 来训练,且针对 DtDt的分类误差应当小于0.5 。这在一定程度上类似残差逼近的思想。考虑到DtDt 和Dt+1Dt+1 的关系有
Dt(x)=D(x)Ex∼D[e−f(x)Ht]e−f(x)Ht(x)Dt(x)=D(x)Ex∼D[e−f(x)Ht]e−f(x)Ht(x)
=D(x)Ex∼D[e−f(x)Ht]e−f(x)Ht−1(x)e−f(x)atht(x)=D(x)Ex∼D[e−f(x)Ht]e−f(x)Ht−1(x)e−f(x)atht(x)
=Dt(x)e−f(x)atht(x)Ex∼D[e−f(x)Ht−1]Ex∼D[e−f(x)Ht]=Dt(x)e−f(x)atht(x)Ex∼D[e−f(x)Ht−1]Ex∼D[e−f(x)Ht]
这就是Adaboost框架中第七行样本分布的更新公式。
Boosting 族算法最著名的代表是AdaBoost
A Decision-Theoretic Generalization of On-Line Learning and an Application to Boosting
我之前写过两篇关于集成学习的文章,其中一篇是专门介绍了AdaBoost的Python实现
机器学习教程 之 Boosting 与 bagging:集成学习框架
机器学习教程 之 集成学习算法: 深入刨析AdaBoost
这次开这篇博客是作为上一篇博客的补充,会具体的描述AdaBoost框架里公式的理论推导
AdaBoost集成算法框架
这里我们先给出AdaBoost的算法框架,再给出框架里公式的具体推导过程输入:
训练集 D={(x1,y1),(x2,y2),...,(xm
20000
,ym)}D={(x1,y1),(x2,y2),...,(xm,ym)};
基学习器 φφ;
训练轮数 TT;
过程:
1. D1(x)=1/mD1(x)=1/m ##初始化权值分布
2. for t=1,2,...,Tt=1,2,...,T do
3. ht=φ(D,Dt)ht=φ(D,Dt) ##基于分布和数据集训练出一个基学习器
4. εt=Px∼Dt(ht(x)≠f(x))εt=Px∼Dt(ht(x)≠f(x)) ##估计出这个基学习器的误差
5. if εt>0.5εt>0.5 then break
6. at=1/2ln((1−εt)/εt)at=1/2ln((1−εt)/εt); ##确定分类器的权重
7. Dt+1(x)=Dt(x))Zt×{exp(−at),ifht(x)=f(x)exp(at),ifht(x)≠f(x)Dt+1(x)=Dt(x))Zt×{exp(−at),ifht(x)=f(x)exp(at),ifht(x)≠f(x) ##更新分布
8. end for
输出:
H(x)=sign(∑Tt=1atht(x))H(x)=sign(∑t=1Tatht(x))
AdaBoost的数学推导
AdaBoost的数学推导主要是推导出分类器权重和分布的更新公式,也就是上述框架中的第6步和第7步。AdaBoost算法有很多种推导方式,比较容易理解的是基于“加性模型“(additive model),即基学习器的组合H(x)=∑Tt=1atht(x)H(x)=∑t=1Tatht(x)
来最小化指数损失函数
ιexp(H|D)=Ex∼D[e−f(x)H(x)]ιexp(H|D)=Ex∼D[e−f(x)H(x)]
这里说明一下AdaBoost之所以使用指数损失函数而不使用01损失函数,是由于指数损失函数具有更好的数学性质,如连续可微等。现在我们来证明指数损失函数可以作为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)∂ιexp(H|D)∂H(x)=−e−H(x)P(f(x)=1|x)+eH(x)P(f(x)=−1|x)
令上式为0可以有
H(x)=12lnP(f(x)=1|x)P(f(x)=−1|x)H(x)=12lnP(f(x)=1|x)P(f(x)=−1|x)
因此,我们有输出
sign(H(x))=sign(12lnP(f(x)=1|x)P(f(x)=−1|x))sign(H(x))=sign(12lnP(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))sign(H(x)) 达到了贝叶斯最优错误率。换而言之,若指数损失函数最小化,则分类错误率也将最小化;这说明指数损失函数是分类任务原本01损失函数的一致替代函数
分类器权重 atat 的更新公式
在AdaBoost算法中,第一个基分类器 h1h1 是通过直接将基学习算法用于初始数据分布而得;此后迭代地生成 htht 和 atat,当基分类器 htht 基于分布 DtDt 产生后,该基分类器的权重 atat 应当使得 athtatht 最小化指数损失函数ιexp(atht|Dt)=Ex∼Dt[e−f(x)atht(x)]ιexp(atht|Dt)=Ex∼Dt[e−f(x)atht(x)]
=e−atPx∼Dt(f(x)=ht(x))+eatPx∼Dt(f(x)≠ht(x))=e−atPx∼Dt(f(x)=ht(x))+eatPx∼Dt(f(x)≠ht(x))
=e−at(1−εt)+eatεt=e−at(1−εt)+eatεt
其中 εt=Px∼Dt(ht(x)≠f(x))εt=Px∼Dt(ht(x)≠f(x)),考虑指数损失函数的导数有
∂ιexp(atht|Dt)∂αt=−e−at(1−εt)+eatεt∂ιexp(atht|Dt)∂αt=−e−at(1−εt)+eatεt
令其为0,有
at=1/2ln((1−εt)/εt)at=1/2ln((1−εt)/εt)
这就是上述框架中第六行中的权重更新公式
AdaBoost的分布更新公式
AdaBoost算法在获得 Ht−1Ht−1 之后样本的分布将进行调整,使下一轮基学习器 htht 能纠正 Ht−1Ht−1 的一些错误。理想的 htht 能纠正 Ht−1Ht−1 的全部错误,即最小化ιexp(Ht−1+ht|D)=Ex∼D[e−f(x)Ht−1(x)+ht(x)]ιexp(Ht−1+ht|D)=Ex∼D[e−f(x)Ht−1(x)+ht(x)]
= Ex∼D[e−f(x)Ht−1(x)e−f(x)ht(x)]Ex∼D[e−f(x)Ht−1(x)e−f(x)ht(x)]
注意到 f2(x)=h2t(x)=1f2(x)=ht2(x)=1, 上式可将 e−f(x)ht(x)e−f(x)ht(x) 泰勒展开为
ιexp(Ht−1+ht|D)≃Ex∼D[e−f(x)Ht−1(x)(1−f(x)ht(x)+f2(x)h2t(x)2)]ιexp(Ht−1+ht|D)≃Ex∼D[e−f(x)Ht−1(x)(1−f(x)ht(x)+f2(x)ht2(x)2)]
=Ex∼D[e−f(x)Ht−1(x)(1−f(x)ht(x)+12)]=Ex∼D[e−f(x)Ht−1(x)(1−f(x)ht(x)+12)]
于是,理想的学习器
ht(x)=argminhιexp(Ht−1+h|D)ht(x)=argminhιexp(Ht−1+h|D)
=argmaxhEx∼D[e−f(x)Ht−1(x)f(x)h(x)]=argmaxhEx∼D[e−f(x)Ht−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)]=argmaxhEx∼D[e−f(x)Ht−1(x)Ex∼D[e−f(x)Ht−1]f(x)h(x)]
这里的Ex∼D[e−f(x)Ht−1]Ex∼D[e−f(x)Ht−1] 表示一个常数。令 DtDt 表示一个分布
Dt(x)=D(x)Ex∼D[e−f(x)Ht−1]e−f(x)h(x)Dt(x)=D(x)Ex∼D[e−f(x)Ht−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)]ht(x)=argmaxhEx∼D[e−f(x)Ht−1(x)Ex∼D[e−f(x)Ht−1]e−f(x)h(x)]
=argmaxhEx∼Dt[f(x)h(x)]=argmaxhEx∼Dt[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))]ht(x)=argminhEx∼Dt[||(f(x)≠h(x))]
由此可见,理想的 htht 在分布 DtDt 下最小化分类误差。因此,弱分类器将基于分布 DtDt 来训练,且针对 DtDt的分类误差应当小于0.5 。这在一定程度上类似残差逼近的思想。考虑到DtDt 和Dt+1Dt+1 的关系有
Dt(x)=D(x)Ex∼D[e−f(x)Ht]e−f(x)Ht(x)Dt(x)=D(x)Ex∼D[e−f(x)Ht]e−f(x)Ht(x)
=D(x)Ex∼D[e−f(x)Ht]e−f(x)Ht−1(x)e−f(x)atht(x)=D(x)Ex∼D[e−f(x)Ht]e−f(x)Ht−1(x)e−f(x)atht(x)
=Dt(x)e−f(x)atht(x)Ex∼D[e−f(x)Ht−1]Ex∼D[e−f(x)Ht]=Dt(x)e−f(x)atht(x)Ex∼D[e−f(x)Ht−1]Ex∼D[e−f(x)Ht]
这就是Adaboost框架中第七行样本分布的更新公式。
相关文章推荐
- Adaboost 算法的原理与推导
- Adaboost 算法的原理与推导
- Adaboost 算法的原理与推导
- Adaboost 算法的原理与推导
- Adaboost 算法的原理与推导
- 归纳迁移学习算法---Adaboost 算法的原理与推导
- Adaboost 算法的原理与推导
- 人工智能里的数学修炼 | 是什么决定了你的学习算法泛化性能?偏差—方差分解(bias-variance decomposition)
- 转 Adaboost 算法的原理与推导
- Adaboost 算法的原理与推导
- Adaboost 算法的原理与推导
- AdaBoost 算法原理及推导
- Adaboost 算法的原理与推导
- Adaboost 算法的原理与推导
- svm的数学推导原理
- Adaboost 算法的原理与推导(笔记)
- Feedforward Neural Network Language Model(NNLM)原理及数学推导
- [置顶] 相机标定的数学原理及其推导过程
- LDA线性判别原理解析<数学推导>
- 【数学】奇异值分解(SVD)原理详解及推导