Adaboost和前向阶段性加法建模

时间:2013-12-11 19:53:29

标签: algorithm machine-learning adaboost

尽管最初并非这样设想,但标准Adaboost算法相当于使用指数损失函数进行前向阶段性加性模型估计。也就是说,给定一些弱分类器 c1,...,cM 和样本点 x1,...,xN 来自算法的权重:

  1. 设置F_0(x)= 0
  2. 对于 m = 1到 M :   设置(w_m,f_m)= arg min(w,c_i)(应用于所有x_i的损失函数(y_i,F_m-1(x_i)+ w * c_i(x_i))
  3. 设置F_m(x)= F_m-1(x)+ w_m * f_m(x)
  4. 强分类器是输出,F_M(x)。使这个强大的学习者与Adaboost输出相同的损失函数是

    L(y,f(x)) = exp(-y*f(x))
    

    用于取值为{-1,1}的分类器。这些都在Hastie,Tibshirani,Friedman,统计学习要素,第10.4节中进行了解释。

    我的问题与前向阶段性回归有关。这是一个贪婪的算法,因为一旦w_i被估计,它是固定的,然后找到权重w_i + 1,等等。这看起来好像它真的被设计用于处理“独立”弱分类器,如树桩分类器或树分类器限制为互斥的独立变量(特征),以便在分类器之后不再解释分类器后的残差分数。

    换句话说,为了使一组函数适合给定的目标函数,我不适合第一个,修复该系数,然后找到第二个的最佳系数,保持第一个常数等等......除非我知道这些功能是独立的。但这就是算法的作用,或多或少。

    这是否解释了Adaboost与树桩学习者或决策树的成功相比(根据我的经验)Adaboost与更全面的分类器(如SVM)或线性模型相比?有人可以提供参考吗? - 我没有看到文献中讨论的这个方面。感谢。

3 个答案:

答案 0 :(得分:5)

我觉得你可能有点困惑,或者使用我不熟悉的术语。 AdaBoost或更一般的阶段性添加剂模型中的任何内容都不是独立的或相互排斥的,也不是相互排斥的。

  

这是否解释了Adaboost与树桩学习者或决策树的成功相比(根据我的经验)Adaboost与更全面的分类器(如SVM)或线性模型相比?

没有。产生分类器集合的方法可以是强大的,并且它们的功能主要来自减少由基础模型的方差引起的误差的能力。 AdaBoost&其他人也可以减少偏见,但是很多更容易减少方差引起的误差。

出于这个原因,我们使用决策树,因为我们可以通过改变树的最大深度来控制树上的偏差/方差水平。这使得生活变得简单,但它们并不是所有提升的结果(例如:在高维度空间中提升是相当困难的,并且在这种情况下树木是可怕的)。

我们通常不会在提升中使用线性模型,因为它们根本就不那么擅长。我们可以生成“简单”的数据集,这些数据集在没有太多考虑的情况下不会被线性模型很好地收敛(考虑在每个类具有相同大小的另一个环中的1个环,以及切割内部(及其外部)环的基础学习器一半)。低决策树桩通常更好,因为它具有非线性,允许更快地适应数据。

我们避免使用SVM等复杂模型,因为它们需要很长时间才能进行训练。无论您选择何种基本模型,AdaBoost都将采用相同类型的解决方案(它会尝试最大化L1边距,其中SVM最大化L2边距)。如果你必须增加1000棵树,或500个SVM,它可能会更快地提升树木。对于每个添加的模型,这甚至都不会进入您为每个SVM必须执行的所有参数搜索。这太费时间了。但是,有些情况可以很好地运作 - here is a face detection case

还有预测时间的问题。如果你需要增加100或1000个模型,它会将预测时间增加2或3个数量级。 SMV已经不是最快的预测因素,这只会使情况变得更糟。

这个细节更多来自数学,然后用英语讨论。如果您有兴趣更明确地讨论有关此类模型工作原因的问题,请阅读Leo Breiman的一些论文。

答案 1 :(得分:1)

adaboost背后的想法是每棵树,或者更普遍的弱学习者,都是单独训练的,并且按照一定的顺序和权重对所有结果进行训练。第一个分类器在基础输入上进行训练,并计算树的权重,第二个分类器使用第一个树分类正确加权的元素进行训练,第一个树错误分类的元素加权更高,并且学习权重第二个分类器,第三个分类器训练的东西是第一和第二个树的新分类器被正确分类加权较低,而它们分类的东西不正确加权,等等。

答案 2 :(得分:0)

考虑一个最简单的例子,您将使用线性模型拟合一维曲线。您将学习曲线,而不是近似。所以每次你拿起两个数据集来学习穿越它们的线。经过充足的学习时间后,将通过平均您学习的所有参数(权重)来获得该线。这样的线将实现最低的样本内错误。这相当于在给定新训练集的情况下更新先前参数的学习过程。

我不确定我是否正确理解了您的问题,但如果您尝试使用上述示例中的不同模型(线性,二次,三次,指数......),则每个模型的权重数不是相同。因此,人们在分类问题中所做的贪婪方法可能不太合适。一种解决方法可能是:您在每个模型上给出权重,并使用增强来确定哪个模型最适合训练数据。

做这种回归的另一种方法是使用神经网络作为弱学习者。这是在神经网络上应用反向传播的一个study。每次训练集的子集被随机选择用于学习和提升过程。并且阶段性加法建模用于更新权重。误差计算和权重因子略有不同,但与分类中使用的形式类似。结果表明,在回归中,ada-neural网络比反向传播更稳定。

在分类问题中,我试图理解为什么AdaBoost与stump学习者比使用SVM更好?由于AdaBoost是一个贪婪的特征选择器,给定相同的功能集,SVM预计会胜过AdaBoost,不是吗?实际上,使用AdaBoost选择重要特征和SVM来分类示例是可行的。您还可以构建一个AdaBoost树,将特征落入SVM边距的子节点,并使用SVM重新训练它们,直到它们被正确分类。