为什么使用决策树进行 Adaboost?

机器算法验证 机器学习 分类 算法 助推
2022-02-01 09:46:31

我一直在阅读一些关于分类任务的增强算法,特别是 Adaboost。我知道 Adaboost 的目的是让几个“弱学习者”,通过对训练数据的一组迭代,推动分类器学习预测模型反复出错的类。但是,我想知道为什么我所做的这么多阅读都使用决策树作为弱分类器。这有什么特别的原因吗?是否有某些分类器对 Adaboost 来说特别好或特别差?

2个回答

我在回答相关的 SO question时谈到了这一点决策树通常非常适合提升,比其他算法更适合。要点/摘要版本是这样的:

  1. 决策树是非线性的。使用线性模型进行提升根本无法正常工作。
  2. 弱学习器需要始终优于随机猜测。您通常不需要对决策树进行任何参数调整来获得该行为。训练 SVM 确实需要参数搜索。由于数据在每次迭代中都会重新加权,因此您可能需要在每次迭代中进行另一次参数搜索。因此,您正在大幅增加您必须完成的工作量。
  3. 决策树的训练速度相当快。因为我们将建造 100 或 1000 台这样的设备,所以这是一个很好的属性。它们的分类速度也很快,当您需要运行 100 或 1000 次才能输出您的决定时,这一点也很重要。
  4. 通过更改深度,您可以简单轻松地控制偏差/方差权衡,因为知道提升可以减少偏差,但也可以显着减少方差。众所周知,Boosting 会过度拟合,因此在这方面,易于调整的 nob 很有帮助。

我没有教科书上的答案。然而,这里有一些想法。

与 bagging 的直接比较可以看出 Boosting。这是偏差方差权衡困境的两种不同方法。虽然 bagging 具有弱学习器,但一些具有低偏差和高方差的学习器,通过对 bagging 集合进行平均来降低方差以减少一点偏差。另一方面,Boosting 适用于不同的弱学习器。boosting 弱学习器具有高偏差和低方差。通过在另一个之上建立一个学习器,boosting ensemble 试图减少偏差,以获得一点差异。

因此,如果您考虑例如使用 bagging 和 boosting with trees 作为弱学习器,那么最好的使用方法是使用 boosting 的小/短树和使用 bagging 的非常详细的树。这就是为什么提升过程经常使用决策树桩作为弱学习器的原因,它是可能的最短树(单个维度上的单个 if 条件)。这个决策树桩非常稳定,因此方差非常低。

我看不出有任何理由使用带有增强程序的树。然而,短树简单、易于实现且易于理解。但是,我认为,为了成功地使用提升程序,你的弱学习器必须具有低方差,必须是刚性的,并且自由度非常低。例如,我认为神经网络作为弱学习者没有意义。

此外,您必须注意,对于某种提升程序,例如梯度提升,Breiman 发现如果弱学习器是一棵树,则可以对提升的工作方式进行一些优化。因此我们有梯度提升树。在 ESTL 书中有一个很好的曝光提升。