Margin理论讨论的主要是学习算法在训练样本上的信心,学习算法的容量是不是随着训练轮数的增加而增加呢,其实并不一定,近来有工作表明,有差异的学习器的组合,能够起到正则化的作用,也就是减少学习算法容量(Diversity regularized ensemble pruning. ECML’12; On the Generalization Error Bounds of Neural Networks under Diversity-Inducing Mutual Angular Regularization)。在许多variance-bias 分解实验中也观察到,AdaBoost不仅是减少了bias,同时也减少了variance,variance的减少往往与算法容量减少有关。
其实 adaboost 这样的浅层模型,我觉得最主要特点是控制了实例的话语权;就算数据倾斜严重;实际上掌握话语权的实例也是较少的,这样数据不平衡因素对其影响就不大了;其实adaboost也是会过拟合的,只不过因为控制在边界所以并不那么明显罢了,其实adaboost受到影响大的还是特征过程做得是否能让数据产生明显的边界,毕竟boosting tree 都是按照split point 分隔,一个好的特征如果能越少次数的分割并且能覆盖更多的实例,那么这个特征就是个好的特征;这个是以上个人观点
回复 ( 10 )
这是一个有趣的问题,到目前还不能说这是一个完全清楚答案的问题。
AdaBoost提出的论文对AdaBoost的泛化界进行了分析,使用了通常的学习器泛化界:
泛化错误(泛化错误可理解为测试错误) < 训练错误 + 学习算法容量相关项 (1)
由(1)式可见,当训练错误不变时,应当选择简单的学习模型,从而减少学习算法容量。然而在实验中已经观察到,在一些情况,训练错误已经是0了,继续训练还能进一步减小泛化错误,这里的继续训练意味着增加学习算法容量,理应导致泛化错误上升才对。因此(1)直接套上AdaBoost是解释不通的。更有JMLR 2008的论文发现,更多的实验观察与Boosting的理论及其统计解释都不符合,例如使用多层的决策树竟然比使用一层的简单决策树更好。理论不能解释实验肯定是理论的问题,于是人们觉得,(1)式不够好,可能把更加细微的因素忽略了。
于是AdaBoost的作者针对这一情况,提出了新的学习器泛化界:
泛化错误 < 训练Margin项 + 学习算法容量相关项 (2)
(1)中的训练错误是指一个数据样本分类对了就是0,错了就是1,而(2)里的“训练Margin”不仅看分类对错,还要看对的信心有多少,例如对于一个正类+1,分类器A输出+0.1,B输出+2,虽然都分类正确了,但B的信心更多。这样(2)就比(1)更加细致的刻画了学习器的表现。实验一看,果然AdaBoost在训练错误为0后,继续训练不能再减少训练错误了,确能够进一步减少训练Margin,也就是信心更足了。
看似解决了AdaBoost不容易过拟合的问题,然而好景不长,统计大牛Leo Breiman(bagging,random forest出自他手)来了个比 (2) 更紧的界(更紧就是更接近真实):
泛化错误 < 训练Margin的最小值 + 学习算法容量相关项 (3)
(3)的容量相关项目更小,但这不是关键,关键是根据这一理论,就应该去看训练Margin的最小值,也就是分类器在所有样本上信心最不足的那个。然而根据这一理论,Breiman设计了另一种Boosting算法arc-gv,最小训练Margin更小了,但实验效果比AdaBoost差了很多。于是乎Breiman的结论是,这个用训练Margin来刻画泛化错误整个就是不对的。大家都傻眼了,AdaBoost不容易过拟合的问题无解了。
7年之后。。。AdaBoost作者之一的工作发现,Breiman的实验竟然有问题:没有很好的控制决策树的复杂性,也就是说,AdaBoost和arc-gv关于“学习算法容量相关项”的值并不一样,虽然arc-gv的最小训练Margin更小,但后面一项更大啊,因此泛化错误就更大了。于是重做实验,都用一层决策树,这样后面一项都一样了,一看AdaBoost更好了,也就是说原来的Margin理论并没有错误,松了口气。该论文获ICML’06最佳论文奖。
但是这篇最佳论文奖并没有终结问题,当都用一层决策树时,AdaBoost的最小训练Margin比arc-gv还要小,也就是说,并没有否定(3)式。然而在实验中,最小化这个最小Margin的效果并不好。这篇论文也指出,可能要看Margin的分布,也就是算法在所有样本上的信心,而不是最差的那个样本上的信心。但这只是“可能”,理论研究者最求的是更紧的界。
接下来都是我国研究者的贡献了,北京大学王立威等人的到了比(3)更紧的界,其中“训练Margin的最小值” 被替代为 “训练Margin的某一个值”,这某一个要解一个均衡式,但不管怎么说,最小Margin被替代掉了。南京大学的高尉和周志华教授推导出了“第k Margin界”,(3)和 “训练Margin的某一个值” 都是其k赋特定值的特例,并由此得到了基于“算法在所有样本上的信心”的界,比(3)式更好。
以上内容可见:CCL2014_keynote-周志华
Margin理论讨论的主要是学习算法在训练样本上的信心,学习算法的容量是不是随着训练轮数的增加而增加呢,其实并不一定,近来有工作表明,有差异的学习器的组合,能够起到正则化的作用,也就是减少学习算法容量(Diversity regularized ensemble pruning. ECML’12; On the Generalization Error Bounds of Neural Networks under Diversity-Inducing Mutual Angular Regularization)。在许多variance-bias 分解实验中也观察到,AdaBoost不仅是减少了bias,同时也减少了variance,variance的减少往往与算法容量减少有关。
总之这一方面还值得进一步探索,新原理的发型,有可能导致新型高效学习算法的发明,意义重大。
首先,adaboost是一种加性模型,又采用了指数损失函数,通过不断增加基本分类器来达到损失函数最小化的效果。每增加一级分类器,损失函数都会减小,也就是偏差越来越小,方差越来越大。从这个角度来说,adaboost模型,比起构成它的基础分类器来说,更容易过拟合。(楼上有人把bagging和boosting搞混了,bagging能减小variance,防止过拟合,而boosting只能减小bias)
而另一方面,adaboost模型对损失函数的逼近,也不是无限的,而且adaboost每次仅优化一个参数也就是说,到了一定程度,受噪声等因素影响,损失函数减小的非常缓慢了。
当然也有人观察到,adaboost在训练集上的误差接近0时,继续增加基础分类器,在训练集上仍然能继续减小误差。这一点一般认为是“Boosting Margin”[1]的存在造成的。这一点看似与上面的情况矛盾?[2]解释的比较清楚:这两种说法都有道理,adaboost在不同的数据分布上表现出不同的情况。训练误差能够减小到0,一定程度说明数据集比较容易分割,这时候Boosting Margin会起到很好的作用,后面的训练起到增大Margin的效果。反之就是第一条在起作用。
这就构成了我们的结论:,adaboost模型,比起构成它的基础分类器来说,更容易过拟合。但当基础分类器选择的非常简单时,模型在实际应用中很难发生过拟合(这就是为什么基础分类器经常选用树桩的原因),而且在比较好分割的数据集合上,adaboost的迭代还有增加Margin的效果。而基础分类器有些复杂的时候,模型在复杂的数据分布上是非常容易发生过拟合的。
[1] The Boosting Margin, or Why Boosting Doesn’t Overfit
[2]
谢邀。
集成学习的方法一般都不容易过拟合(并不是不会过拟合)。比如Bagging方法从bias-variance trade-off(Bias–variance tradeoff)的角度看,在regression问题中能够起到降低variance(如果模型之间是不相关的,那么有N个弱学习器,就能让variance减少N倍,但其实这是几乎不可能的,在bagging中用bootstrap方法得到的弱学习器之间是相关的),保持bias不变的作用,因此能够在训练中随着弱学习器的增加,逐渐降低泛化误差。
而直觉得把Bagging中的这个想法推广到其他集成学习方法上去,也可以直觉得认为其他组合模型的方法也有类似作用(比如adaboost),但实际上,分析adaboost算法对variance的影响,恐怕没有bagging算法这么简单。并且,bagging和adaboost的表现其实是不太一样的。
adaboost在实验中表现出更加不容易过拟合(相对于别的boosting方法)的现象,尤其是在实验中发现迭代中经验误差都已经不变化了的情况下,测试误差居然还能下降一段时间。这也是adaboost为啥这么牛逼的主要原因。
目前对此的解释可以参考一本综述:Z.-H. Zhou. Ensemble Methods: Foundations and Algorithms
margin theory可以解释为什么adaboost效果好,bias-variance decompose解释bagging效果好可以,解释boosting不行。
看看boosting the margin: a new explanation for effectiveness of voting methods这篇论文。
另外deepboosting这篇论文introduction介绍了几篇adaboost过拟合的工作
因为adaboost可以降低variance
基本上所有的集成算法都是降低variance的。
其实 adaboost 这样的浅层模型,我觉得最主要特点是控制了实例的话语权;就算数据倾斜严重;实际上掌握话语权的实例也是较少的,这样数据不平衡因素对其影响就不大了;其实adaboost也是会过拟合的,只不过因为控制在边界所以并不那么明显罢了,其实adaboost受到影响大的还是特征过程做得是否能让数据产生明显的边界,毕竟boosting tree 都是按照split point 分隔,一个好的特征如果能越少次数的分割并且能覆盖更多的实例,那么这个特征就是个好的特征;这个是以上个人观点
没有说不会过拟合吧。我理解 如果用adaboost一直迭代,应该还是存在过拟合的问题,只是过拟合比较慢 or 我们可能不需要迭代那么多次就已经有一个还可以的结果。
是不是overfitting永远是个针对实际模型的相对概念。。
题主先把问题出处拿出来吧,先确定先是不是,再来讨回为什么。
Adaboost主要降低bias, 而bagging只降低variance。所以后者不容易产生过度拟合,而前者很容易产生过度拟合。所以问题应该改为:adaboost会不会容易产生过度拟合?为什么?