adaboost提升算法

引言

俗话说得好,三个臭皮匠赛过诸葛亮。更主要的是三个臭皮匠好找,一个诸葛亮太难找了。在机器学习里面也是一样的。我们可以设计出各种分类器,然而分类器的效果确实不一而同的,相对而言,效果较差的分类器比效果很好的分类器更好设计,后者很多时候可遇而不可求。那么是否有什么方法能够将一系列的弱分类器组合,使其能够提示分类效果呢?这就是机器学习里面的提升学习。而且后来Schapire证明强可学习与弱可学习是等价的,这个就很完美了,这样我们就有了理论指导,通过一系列的弱学习算法可以提升为强学习算法,adaboost就是最重要的一个例子。

提升算法的思想

提升算法通过提高前面分类错误的样本的权重,是后面的分类器更加关注这些错误样本的分类,进而能够分而治之,使分类器重点关注不同的样本。

adaboost算法

下面我们先来介绍adaboost算法,后面再对算法做推导解释。(猜想adaboost算法应该是先提出的算法,后续才找个合理的解释。)

输入

  • 训练数据集 D={(x1,y1),...,(xN,yN)}D={(x1,y1),...,(xN,yN)}
  • 弱学习算法

算法过程


  • 初始化训练数据的权值分布为W1=(w11,...,w1N)W1=(w11,...,w1N)其中W1i=1NW1i=1N
  • 进行迭代训练,即对m=1,2,...,Mm=1,2,...,M

  • 使用权重为WmWm的训练数据训练学习器Gm(x)Gm(x)
  • 计算Gm(x)Gm(x)上的训练误差率em=P(Gm(xi)yi)=Ni=1wmiI(Gm(xi)yi)em=P(Gm(xi)≠yi)=∑i=1NwmiI(Gm(xi)≠yi)
  • 计算Gm(x)Gm(x)的系数αm=12log1ememαm=12log1−emem
  • 更新训练集的权重Wm+1=(wm+1,1,...,wm+1,N)Wm+1=(wm+1,1,...,wm+1,N) 其中wm+1,1=xmiZmexp(αmyiGm(xi))wm+1,1=xmiZmexp(−αmyiGm(xi)),其中ZmZm 是规范化因子,即Zm=Ni=1wmiexp(αmyiGm(xi))Zm=∑i=1Nwmiexp(−αmyiGm(xi))
  • 构建分类器的线性组合f(x)=Mm=1αmGm(x)f(x)=∑m=1MαmGm(x)
  • 得到最终的分类器为G(x)=sign(f(x))=sign(Mm=1αmGm(x))G(x)=sign(f(x))=sign(∑m=1MαmGm(x))

输出

  • 最终的分类器G(x)G(x)

算法很简单也很好理解,同时很好用,而且效果确实很好,这就够了。

本质上讲权重在emem出影响了分类器的选择,进而影响了数据分布,在这里将去权重间接的引入到了数据集中,影响了训练数据的分布。在一些书中说通过改变权重影响训练数据集的分布,其实就是这个意思,并不是真的修改了数据集的分布,而是通过误差率选择了分类效果最好的学习器,使分类器能够偏向去正确分类之前错误分类的数据。

过拟合

有了算法,那么还有一个问题,就是算法的过拟合问题。adaboost有很强的抗过拟合能力,然而很遗憾的是,针对adaboost问题的抗过拟合原因,至今没有一个比较完美的解释,虽然大牛们做了很多工作,但是依旧还是有很大的困难。一种猜想是通过多种分类器的组合,天然的引入了多样性,使算法不易过拟合。

算法解释

上面我们提出了算法,这里我们尝试利用数学推导来解释一下为什么adaboost这样设计是合理的。

对于adaboost可以理解为算法模型为加法模型,损失函数为指数函数,学习算法为前向分步算法时的二分类学习算法

给定加法模型f(x)=Mm=1βmb(xi,γm)f(x)=∑m=1Mβmb(xi,γm),损失函数为L(x,f(x))L(x,f(x)),则问题转化为最小化损失函数,即minβm,γmNi=1L(yi,Mm=1βmb(xi,γm))minβm,γm∑i=1NL(yi,∑m=1Mβmb(xi,γm))

对于这个公式,基本上没有办法直接求得解析解,因此我们可以利用前向分步算法来近似求解。

前向分步算法

前向分步算法的思想就是每次只优化一个基函数机器系数,逐步逼近目标,最后得到目标的近似值。


  • 初始化f(x)=0f(x)=0
  • m=1,2,...,Mm=1,2,...,M

  • 极小化损失函数(βm,γm)=argminβ,γ(Ni=1L(yi,fm1(xi)+βb(xi,γ)))(βm,γm)=argminβ,γ(∑i=1NL(yi,fm−1(xi)+βb(xi,γ)))
  • 更新fm(x)=fm1+βmb(x,γm)fm(x)=fm−1+βmb(x,γm)
  • 得到加法模型f(x)=Mm=1βmb(x,γm)f(x)=∑m=1Mβmb(x,γm)

adaboost算法解释

由前文,adaboost算法的分类器如下:

f(x)=Mm=1αmGm(x)f(x)=∑m=1MαmGm(x)

根据数学归纳法,假设m1m−1轮,根据前向分步算法,已经得到:

fm1(x)=fm2(x)+αm1Gm1(x)fm−1(x)=fm−2(x)+αm−1Gm−1(x)

则在第mm轮有:

fm(x)=fm1(x)+αmGm(x)fm(x)=fm−1(x)+αmGm(x)

目标:得到αm,Gm(x)αm,Gm(x)使得fm(x)fm(x)在训练集上的指数损失L(y,f(x))=exp[yf(x)]L(y,f(x))=exp[−yf(x)]最小。

(αm,Gm(x))=argminα,GNi=1exp(yi(fm1(xi)+αmGm(x)))(αm,Gm(x))=argminα,G∑i=1Nexp(−yi(fm−1(xi)+αmGm(x)))

前一项w¯mi=exp(yifm1(xi))w¯mi=exp(−yifm−1(xi))跟最小化(αm,Gm(x))(αm,Gm(x))无关,

因此
(αm,Gm(x))=argminα,GNi=1w¯miexp(yiαmGm(x))(αm,Gm(x))=argminα,G∑i=1Nw¯miexp(−yiαmGm(x))

则最小的Gm(x)Gm(x)为:

Gm(x)=argminGNi=1w¯miI(yiG(xi))Gm∗(x)=argminG∑i=1Nw¯miI(yi≠G(xi))

对于αmαm∗,有:

Ni=1w¯miexp(yiαmGm(x))=yiGm(xi)w¯mieα+yiGm(xi)w¯mieα∑i=1Nw¯miexp(−yiαmGm(x))=∑yi∈Gm(xi)w¯mie−α+∑yi∉Gm(xi)w¯mieα

=(eαeα)Ni=1w¯miI(yiG(xi))+eαNi=1w¯mi=(eα−e−α)∑i=1Nw¯miI(yi≠G(xi))+e−α∑i=1Nw¯mi

αα进行求导,有:

(eα+eα)Ni=1w¯miI(yiG(xi))eαNi=1w¯mi=0(eα+e−α)∑i=1Nw¯miI(yi≠G(xi))−e−α∑i=1Nw¯mi=0

可以得到αm=12log(w¯miw¯miI(yiG(xi))1)αm∗=12log(∑w¯mi∑w¯miI(yi≠G(xi))−1)

em=w¯miI(yiG(xi))w¯mi=wmiI(yiG(xi))em=∑w¯miI(yi≠G(xi))∑w¯mi=wmiI(yi≠G(xi))

有:αm=12log1ememαm∗=12log1−emem

αmαm 的更新与adaboost算法的αmαm的更新形式一致,因此adaboost可以看做是算法模型为加法模型,损失函数为指数函数,学习算法为前向分步算法时的二分类学习算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值