Boosting

来源:互联网 发布:经传软件指标 编辑:程序博客网 时间:2024/05/17 01:54

提升算法(Boosting)是常用的有效的统计学习算法,属于迭代算法,它通过不断地使用一个弱学习器弥补前一个弱学习器的“不足”的过程,来串行地构造一个较强的学习器,这个强学习器能够使目标函数值足够小。从优化的角度分析,与一般的在参数空间搜索最优解的学习算法(如神经网络)类似,Boosting也是一个迭代搜索,且最优的算法,不同的是,它的搜索空间是学习器空间,或说函数空间(Function space),它的搜索方向是构造不断完善的强学习器,以达到目标函数(或说误差函数)足够小的目的。
Bagging也是一种常用的统计学习方法,两者经常放在一起对比,它们不同的是,Bagging将在Bootstrap采样得到的不同训练子集上的弱学习器的结果综合考虑,各个弱学习器的构建过程是并行的。而Boosting是通过串行地不断迭加弱学习器形成一个强学习器,是学习模型的提升过程。此外,Boosting迭代在降低训练误差的同时,使模型预测的确信度(margin)不断提高,是它获得较好泛化能力的主要原因,而Bagging主要是通过平均来降低模型的方差(variation).(关于Bagging可参考我的博文Bagging)
本文首先通过一个简化的例子来说明Boosting的主要过程,然后介绍了AdaBoost——Boosting的一个成功实现,最后介绍了将梯度下降的思想引入Boosting算法,使Boosting在获得更快的收敛速度的同时,能够被扩展到更广泛的应用,这些应用往往使用更多样的目标函数。

Toy example

为说明Boosting的主要过程,下面举一个简化的例子。
假设训练数据集为(x1,y1),(x2,y2),...,(xn,yn)我们的任务是寻找使这个回归问题的均方误差最小的模型F(x).
如果已经有一个初始的模型f,且f(x1)=0.8,但y1=0.9,f(x2)=1.4,但y2=1.3 …显然f是不完美的,我们可以采用不断完善f的方式,如不断在f的基础上增加模型(如决策树)h,即:f(x)f(x)+h(x),使f 趋于F.
我们希望:

f(x1)+h(x1)=y1f(x2)+h(x2)=y2...f(xn)+h(xn)=yn

即:
h(x1)=y1f(x1)h(x2)=y2f(x2)...h(xn)=ynf(xn)

然而恰好满足上式的h可能不存在,但我们总可以找到使残差yif(xi)变小的h.
上述过程等价于拟合如下数据集:
(x1,y1f(x1)),(x2,y2f(x2)),...,(xn,ynf(xn))

上述一次叠加h的过程就是Boosting的一次迭代。要使f足够接近F一般需要多次迭代。

AdaBoost

是Adaptive Boost的缩写,是Boosting的一个成功的实现。本小节主要介绍了AdaBoost是如何工作的(how)、为什么是有效的(Why)以及什么情况下是适用的(When).

How it works

Boosting是不断使用后一个弱分类器弥补前一个弱分类器的不足的过程,在AdaBoosting中“不足”是指被前一个弱学习器误分类的点,在下一次分类中被赋予更大的权重。与其他的Boosting实现不同的是这种算法可以适应各弱分类模型各自的训练误差。

AdaBoost算法

这里写图片描述

目标函数及优化方法
数学上可以证明,AdaBoost方法不断拟合一个强学习器F(x)F(x)+αh(x)的过程其实是利用某种优化方法(如自适应牛顿法)使目标函数J(F)=E(eyF(x))最小的过程。Friedman 的证明突出了使用自适应牛顿的优化方法来使目标函数最小,而李航书中的证明从前向分步的角度。
该指数目标函数是有效的,因为它偏向于正确分类结果,采用每次迭代使用穷举搜索来找到使目标函数最小的h。从这个角度看,AdaBoost之所以有效是因为它能使目标函数不断减小。
指数误差函数的一个优点是其最小化将会得到最简单的AdaBoost方法,缺点是,与交叉熵误差函数相比,它对负的ty(x)的惩罚较大,对误分类的数据点的鲁棒性差。

正则化
通过控制迭代次数来防止过拟合。

Why it works

AdaBoost为什么既能获得较低的训练误差也能获得较低的测试误差?我们可以用VC维理论来解释,同时也发现一些实验结果显示AdaBoost的训练误差为零时,测试误差还能持续降低,这种现象与VC 维理论相悖,而Margin理论能很好解释这一点。
下面左图表示理想的VC维理论下,训练误差和测试误差随Boosting迭代增加的变化趋势,右图表示一个实际的实验结果,VC 维理论成功地预测了测试误差在训练误差达到一定程度时会上升,但是不能很好解释测试误差在上升之后存在下降的现象。

图片来自Robert ,Explaining Booting
(图片来自Robert ,Explaining Booting)

下面左图,测试误差在训练误差达到零并保持不变的情况下的很长的迭代过程中仍然保持减小的趋势,这是VC理论无法解释的。在Margin理论中,分类的错误率并不能完全表达分类效果的好坏,需要增加一个margin量来度量对分类结果的确信程度(confidence).margin可以表示为正、误分类概率之差,在这种表示方式下随着Boosting迭代次数的增加训练和测试数据集上的margin值都在增加,这可能是Boosting算法较好的泛化能力的来源。

这里写图片描述
(图片来自Robert ,Explaining Booting)

When it works

即使对于有噪声的训练集,AdaBoost也有很好的收敛效果,但是对于非常弱的学习器,AdaBoost的性能将变得很差。

Gradient Boosting

梯度提升(GB,Gradient Boosting )是一类算法,可以用于回归、分类、排序,适用于不同的误差函数,弱学习器。
Gradient Boosting = Gradient Descent + Boosting
Gradient Boosting 的历史:

这里写图片描述

对于目标函数最小化问题,我们有多种办法得到最小值点,但是在数值求解法中,负梯度提供了一个最速下降的方向来尽快收敛到最小值点(当然可能是局部最小值)。将梯度下降的办法与Boosting相结合,尽快完善前一个弱学习器的不足,便成了沿目标函数的负梯度方向前进的过程,使得学习器尽快收敛到使目标函数最小的假设F(x).

参考文献

Boosting
1.Schapire R E, Freund Y, Bartlett P L, et al. Boosting the margin: a new explanation for the effectiveness of voting methods[J]. Annals of Statistics, 1998, 26(5): 1651-1686.
2.Schapire R E, Freund Y. Boosting: Foundations and Algorithms[J]. Kybernetes, 2013.

AdaBoost
1.Robert E. Schapire,Explaining Booting
2.Friedman J H, Hastie T, Tibshirani R, et al. Additive logistic regression : A statistical view of boosting[J]. Annals of Statistics, 2000, 28(2): 337-407.
3.李航,《统计学习方法》
4.PRML

Gradient Boosting
1.Friedman J H. Greedy function approximation: A gradient boosting machine.[J]. Annals of Statistics, 2001, 29(5): 1189-1232.
2.Natekin A, Knoll A. Gradient boosting machines, a tutorial[J]. Frontiers in Neurorobotics, 2013.
3.http://www.ccs.neu.edu/home/vip/teach/MLcourse/4_boosting/slides/gradient_boosting.pdf

0 0
原创粉丝点击