5

虽然最初不是这样构思的,但标准的 Adaboost 算法等效于使用指数损失函数进行前向阶段加性模型估计。也就是说,给定一些弱分类器c1,...,cM和样本点x1,...,xN来自算法的权重:

  1. 设置 F_0(x) = 0
  2. 对于m = 1 到M:设置 (w_m, f_m) = arg min over (w, c_i) of (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, Elements of Statistical Learning , Section 10.4中解释了这一切。

我的问题与前向逐步回归有关。这是一个贪心算法,一旦估计 w_i,它就被固定,然后找到权重 w_i+1,等等。这似乎真的是为处理“独立”弱分类器而设计的,如树桩分类器或树分类器仅限于互斥的独立变量(特征),因此拟合分类器后的残差不再由该分类器解释。

换句话说,要将一组函数拟合到给定的目标函数,我不会拟合第一个,固定该系数,然后找到第二个的最佳系数,保持第一个常数,等等......除非我知道功能是独立的。但这或多或少是算法所做的。

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

4

3 回答 3

6

我想你可能有点困惑,或者使用了我不熟悉的术语。在 AdaBoost 或更通用的阶段性加法模型中,没有任何东西是独立的或相互排斥的,也没有被设计成相互排斥的。

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

不。产生分类器集合的方法可能很强大,它们的强大主要来自于减少由基本模型的方差引起的误差的能力。AdaBoost 和其他人也可以减少偏差,但减少方差引起的误差要容易得多。

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

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

我们避免使用 SVM 等复杂模型,因为它们需要很长时间来训练。无论您选择哪种基本模型,AdaBoost 都将朝着相同类型的解决方案运行(它试图最大化 L1 边距,而 SVM 最大化 L2 边距)。如果你必须提升 1000 棵树或 500 个 SVM,那么提升树的速度可能要快得多。这甚至没有涉及您必须为每个添加的每个模型的每个 SVM 执行的所有参数搜索。这太费时了。但是,在某些情况下这可以很好地工作 -这是一个人脸检测案例

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

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

于 2013-12-12T03:53:51.177 回答
2

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

于 2013-12-11T20:52:49.830 回答
0

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

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

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

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

于 2013-12-12T00:42:12.920 回答