尽管最初的设想并非如此,但标准的Adaboost算法相当于使用指数损失函数进行前向逐步加法模型估计。也就是说,给定一些弱分类器c1,…,cM和样本点x1,…,xN,算法输出的权重如下:
- 设 F_0(x) = 0
- 对于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
- 设 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重新训练它们,直到它们被正确分类。