Adaboost与前向逐步加法建模

尽管最初的设想并非如此,但标准的Adaboost算法相当于使用指数损失函数进行前向逐步加法模型估计。也就是说,给定一些弱分类器c1,…,cM和样本点x1,…,xN,算法输出的权重如下:

  1. 设 F_0(x) = 0
  2. 对于m 从 1 到 M:设 (w_m, f_m ) = 在 (w, c_i) 上最小化的参数,其中损失函数为(Loss function(y_i, F_m-1(x_i) + w * c_i(x_i)),应用于所有 x_i
  3. 设 F_m(x) = F_m-1(x) + w_m * f_m(x)

强分类器是输出,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或线性模型)相比?有人能提供参考文献吗?我在文献中没有看到讨论这一方面的。谢谢。


回答:

考虑最简单的例子,你将用线性模型拟合一条1D曲线。不是近似,你将学习这条曲线。所以每次你选择两个数据集来学习穿过它们的线。经过多次学习后,这条线将通过平均所有你学到的参数(权重)得到。这样的一条线将实现最低的样本内误差。这相当于在给定新训练集时更新先前参数的学习过程。

我不确定我是否正确理解了你的问题,但如果你试图用不同的模型(线性,二次,立方,指数…)来拟合上面的例子,每个模型的权重数量是不一样的。所以在分类问题中人们使用的贪婪方法可能不适合。一个解决方法可能是:你给每个模型赋予权重,并使用提升方法来确定哪个模型最适合训练数据。

另一种进行这种回归的方法是使用神经网络作为弱学习器。这里有一项研究,它在神经网络上应用了反向传播。每次随机选择训练集的一个子集用于学习和提升过程。前向逐步加法建模用于更新权重。误差计算和权重因子与分类中使用的略有不同但形式相似。结果表明,ada-神经网络在回归中比反向传播更稳定。

在分类问题中,我试图理解为什么使用树桩学习器的AdaBoost比使用SVM的更好?由于AdaBoost是一种贪婪的特征选择器,给定相同的特征集,SVM应该表现得更好,不是吗?实际上,使用AdaBoost来选择重要特征,然后使用SVM来分类样本是可行的。你也可以构建一个AdaBoost树,将落在SVM边缘内的特征放到子节点,并用SVM重新训练它们,直到它们被正确分类。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注