集成学习:Boosting及Adaboost、Gradient boosting

[toc]
集成学习源于弱可学习和强可学习的等价性证明。一个概念是弱可学习的是指存在多项式时间内的学习算法能够学习它,且学习的正确率略高于随机猜测;一个概念强可学习是指存在多项式时间内的学习算法能够学习它,且学习的正确率非常高。Schapire证明了弱可学习和强可学习是等价的,即一个概念是强可学习的充要条件是概念 弱可学习。那么一个很自然的问题就是,已知一组弱学习器,能否将它们转化为强学习器?答案是肯定的,而转化方法就是集成学习。
集成学习主要分为两大类:
1.个体学习器间存在强依赖关系,必须串行生成的序列化方法,代表为Boosting;
2.个体学习器之间不存在强依赖关系、可同时生成的并行化方法,代表为Bagging。
本文主要介绍Boosting的机制及其代表算法Adaboost和Gradient boosting
的过程和推导。

Boosting

Boosting是先从初始训练集训练出一个弱学习器,再根据弱学习器的学习准确率调整样本的权重,然后基于调整过权重后的样本训练下一个弱学习器,重复以上步骤直到弱学习器数目达到设定值T,最后将这些弱学习器加权结合。
Boosting的代表算法有Adaboosting和Gradient Boosting。
首先介绍二分类任务中Adaboost 的过程和推导。

Adaboost

1.符号:
数据集 {(x1,y1),...(xN,yN))} , yi{1,1}
ki() :第i个弱学习器;
αi() :第i个弱学习器的权重;
Cm() : 前m个弱学习器的线性组合;
ωm :第m次训练中样本的权重向量;
ϵm :第m个弱学习器的加权误差率。

2.过程:
输入:训练集 D={(x1,y1),...,(xN,yN)} ,训练轮数T,基学习算法 Φ
ω1=1N
for t=1,2,…,T do:
kt=Φ(ωt,D)
ϵt=yikt(xi)ωtii=1Nωti
If ϵt>0.5 ,then break
αt=12ln(1ϵtϵt)
ωt+1=eyCt(x) # ωt+1i=eyiCt(xi),i=1,2,...,N
end for
输出: CT(xi)=α1k1(xi)+...+αTkT(xi)

3.推导
要求解线性组合器

Cm(xi)=α1k1(xi)+...+αmkm(xi)

可以写成
Cm(xi)=Cm1(xi)+αmkm(xi)

从这个等式可以看出,若已知第m-1个线性组合器,要求解第m个线性组合器只需求解第m个基学习器 km() 及其权重 αm 即可。因此整个问题可以拆分成m步求解。
定义 Cm 的损失函数:
E=i=1NeyiCm(xi)

直观的理解,由于 yi{1,1} ,如果预测正确,即 yi=Cm(xi) ,则 yiCm(xi)=1 ,否则为-1。故预测正确的样本数量越多E越小,反之越大。
E=i=1NeyiCm(xi)=i=1NeyiCm1(xi)eyiαmkm(xi)

ωmi=eyiCm1(xi)i ,则
E=i=1Nωmieyiαmkm(xi)
=yi=km(xi)ωmieyiαmkm(xi)+yikm(xi)ωmieyiαmkm(xi)
=yi=km(xi)ωmieαm+yikm(xi)ωmieαm
=i=1Nωmieαm+yikm(xi)ωmi(eαmeαm)
首先求 km() 。注意到 km() 对等式右边第一部分没有影响,只对第二部分的值有影响。由于 αm>0 ,所以 eαmeαm>0 ,故当 yikm(xi)ωmi 最小时,E最小。换句话说,应选择具有最小加权分布误差的 km=Φ(ωt,D)
对于 αm :
Eαm=yi=km(xi)ωmieαm+yikm(xi)ωmieαm=0
αm=12ln(yi=km(xi)ωmiyikm(xi)ωmi)
ϵm=yikm(xi)ωmii=1Nωmi ,即加权分类误差率,
αm=12ln(1ϵmϵm)
至此我们推导出了每一步所需要的 αm,km,ωm

Gradient boosting

Gradient boosting产生的强学习器依旧是一组弱学习器的线性组合。它采用了steepest descent方法来寻找最优解。

推导:
假设学习器为 F(x)=m=0Mβmh(x;am) 。其中 h() 为给定结构的弱学习器类型 , am 为弱学习器的参数。 βm 为每个弱学习器的权重。M为弱学习器个数。

理想地,我们需要能够使损失函数L在未知样本 (X,Y) 上期望值达到最小的学习器F,即:

F=argminF{EX,YL(Y,F(X))}

但是绝大多数情况下,我们只有有限的训练样本,无法得知上述期望。所以用训练样本来代替期望值。即求解:
F(x)=argminF{i=1N(L(yi,F(xi)))}

接下来用steepest descent的方法:

Fm(x) 为第m步求得的学习器。
初始 F0(x)=argminρi=1NL(yi,ρ) ,即样本均值。
在第m步中,假设 Fm1 已知,则训练损失函数在 xi 的梯度 gm(xi)

gm(xi)=[L(yi,F(xi))F(xi)]F(xi)=Fm1(xi)

梯度是函数值上升最快的方向,所以 gm={gm(xi)}N1 为函数值在样本空间下降最快的方向。根据steepest descent,需要以 gm F 的前进方向。然后用line search在该方向上求解最优步长 ρm ,并令 Fm=Fm1ρmgm 。但是 gm 只定义在训练样本 {xi}N1 上,故上式中的 Fm 无法用在其他x值上。

解决这个问题的办法是用一个基学习器 h(x;am) 拟合梯度方向 。由于基学习器的结构已经给定,若 am 确定则基学习器确定。

am=argmina,βi=1N[gm(xi)βh(xi;a)]2

注意如果把基学习器看成一个向量的话,这里的基学习器是最平行于 gm 的向量,而不是最靠近 gm 的向量。 因为步长可以缩放基学习器。

有了前进方向,接下来计算前进步长 ρm

ρm=argminρi=1NL(yi,Fm1(xi)+ρh(xi;am))

然后更新 Fm
Fm(x)=Fm1(x)+ρmh(x;am)

算法:
1. F0(x)=argminρi=1NL(yi,ρ)
2.For m=1 to M do:
3. yi^=[L(yi,F(xi))F(xi)]F(xi)=Fm1(xi) ,i=1,…,N
4. am=argmina,βi=1N[yi^βh(xi;a)]2
5. ρm=argminρi=1NL(yi,Fm1(xi)+ρh(xi;am))
6. Fm(x)=Fm1(x)+ρmh(x;am)
7.end For

你可能感兴趣的:(机器学习,算法)