前言
AdaBost算法是Boosting族算法最著名的代表。这一族算法的工作机制也是很类似的:先从初始训练集训练处一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续收到更多关注,然后基于调整之后的的样本分布来训练下一个基学习器;日此往复,直至基学习器数目达到事先指定的值T,最终将这T个基学习器进行加权组合。
由于这里重点介绍的是AdsBoost算法,接下来就将介绍其原理和算法步骤。
1. 算法原理
这里讲解AdaBoost算法的推导,使用的是“加性模型”,既基学习器的线性组合
H(x)=∑t=1Tαtht(x)
其中, ht(x) 是代表一个基学习器, αt 是代表权重。然后定义最小化指数损失函数
Lexp(H|D)=Ex D[e−f(x)H(x)]
其中D代表的是两个分类,这里使用的是 ±1 表示。在AdaBoost算法中,第一个基分类器 h1 是通过直接将基学习算法用于初始数据分布而得;伺候迭代地生成 ht 和 αt ,当基分类器 ht 基于分布 Dt 产生后,该及分类器的权重 αt 应使得 αtht 最小化指数函数
Lexp(αtht)=Ex Dt[e−f(x)αtht(x)]=Ex Dt[e−αtΠ(f(x)=ht(x))+eαtΠ(f(x)≠ht(x))]=e−αtPx Dt(f(x)=ht(x))+eαtPx Dt(f(x)≠ht(x))=e−αt(1−ϵt)+eαtϵt
其中 ϵt=Px Dt(ht(x)≠f(x)) ,也就是分类错误率。在对指数损失函数求偏导得到
∂Lexp(αtht|Dt)∂αt=−eαt(1−ϵt)+eαtϵt
令偏导数为零,得到
αt=12ln(1−ϵtϵt)
AdaBoost
算法在获得 Ht−1 之后仰恩分布将进行调整,使下一轮的基学习器 ht 能够修成 Ht−1 的错误。理想的 ht 能修正 Ht−1 的全部错误,既最小化
Lexp(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)]
由于 f2(x)=h2(x)=1 ,上面式子中的 e−f(x)ht(x) 的泰勒展开近似为
Lexp(Ht−1+ht|D)≃Ex D[e−f(x)(Ht−1(x))(1−f(x)ht(x)+f2(x)h2t(x)2]=Ex D[e−f(x)(Ht−1(x))(1−f(x)ht(x)+12]
在最优化的过程中是最小化指数损失函数
ht(x)=argminhLexp(Ht−1(x)+ht|D)=argminhEx D[e−f(x)(Ht−1)(x)(1−f(x)ht(x)+12]=argmaxhEx D[e−f(x)(Ht−1(x))f(x)ht(x)]=argmaxhEx D[e−f(x)Ht−1(x)Ex D[e−f(x)Ht−1(x)]f(x)ht(x)]
注意到 Ex D[e−f(x)Ht−1(x)] 是一个常数。令 Dt 表示一个分布
Dt(x)=D(x)e−f(x)Ht−1(x)Ex D[e−f(x)Ht−1(x)]
则根据数学期望的定义,这等价于令
ht(x)=argmaxhEx D[e−f(x)Ht−1(x)Ex D[e−f(x)Ht−1(x)]f(x)ht(x)]=argmaxhEx Dt[f(x)ht(x)]
由 f(x) , h(x)∈−1,+1 ,有
f(x)h(x)=1−2Π(f(x)≠f(x))
则
ht(x)=argminhEx Dt[Π(f(x)≠f(x))]
Dt 于 Dt+1 的关系有
Dt+1=D(x)e−f(x)Ht(x)Ex D[e−f(x)Ht(x)]f(x)ht(x)]=D(x)e−f(x)Ht−1(x)e−f(x)αtht(x)Ex D[e−f(x)Ht(x)]=Dt(x)e−f(x)αtht(x)Ex D[e−f(x)Ht−1(x)]Ex D[e−f(x)Ht(x)]
这里从基于加性模型迭代式,优化指数损失函数的角度推导了AdaBoost算法。
2. 算法步骤
3. 参考
- 机器学习——周志华
- 统计学习方法——李航