了解梯度提升

机器算法验证 机器学习 分类 助推 集成学习
2022-03-12 03:29:15

在高层次上,我看不出通过梯度提升获得的简单模型的集成如何优于单个更复杂的模型?做梯度提升而不是简单更复杂的模型有什么意义?下面两个具体场景:

  1. 在我阅读的一篇文章(Gradient boosting from scratch)中,有一个用于回归的简单树(树桩)集成的示例。那么为什么梯度提升的方法比单个更复杂的深度更大的树更好呢?

  2. a)在线性回归的情况下,使用梯度提升似乎没有意义。有人可以解释为什么(或反驳)吗?这将有助于我理解回归和提升。例如,不要对许多特征(甚至可能是特殊的特征,如 LASSO)进行回归,而是对单特征回归进行连续迭代,通过梯度提升对它们进行分组。

    b)同 2a,仅用于逻辑回归。我怀疑这可能是有道理的,因为计算的函数不是线性的。但是,为什么要使用逻辑回归而不是正则化逻辑回归来应用梯度提升呢?

3个回答

我之前在这个网站上回答过问题。2a

正如您所怀疑的,答案2b是相同的。一般来说,梯度提升在用于分类时,不是在预测概率梯度的水平上拟合树,而是在预测对数几率的梯度上拟合树。因此,原则上2b归结为2a

至于1

这里有一个用于回归的简单树(树桩)集合的示例。那么为什么梯度提升的方法比单个更复杂的深度更大的树更好呢?

梯度提升的强大之处在于它允许我们构建非常复杂的预测函数。构建非常复杂的预测函数的问题在于偏差方差权衡。大的复杂性意味着非常低的偏差,不幸的是它与非常高的方差相结合。

如果你一次性拟合了一个复杂的模型(例如深度决策树),你没有做任何事情来处理这种方差爆炸,你会发现你的测试错误非常糟糕。

Boosting 本质上是一种在尝试构建复杂预测函数时仔细控制模型方差的原则方法。主要思想是我们应该非常缓慢地构建预测功能,并不断检查我们的工作,看看我们是否应该停止构建。这就是为什么使用小学习率和弱个体学习器对于有效使用提升如此重要的原因。这些选择使我们能够非常缓慢地对复杂性进行分层,并在构建预测函数时非常小心。通过监控构建中每个阶段的测试错误,它可以让我们在很多地方停下来。

如果你不这样做,你的提升模型会很差,通常和单个决策树一样差。尝试在梯度提升模型中将学习率设置为,或者使用非常深的树作为单个学习器。1.0

我想提供几个参考来回答你的问题。

  1. 我会争辩说,根据数据,增强树桩并不一定比深树更好。它们不一样。可以在此处找到差异的可视化

线性基础学习器如何在 boosting 中发挥作用?它在 xgboost 库中是如何工作的?

所有机器学习算法都线性分离数据吗?

  1. 对于使用线性模型提升的讨论,我的第一个链接给出了答案。此外,@Matthew Drury 在这里有一个很好的答案。

线性回归的梯度提升 - 为什么它不起作用?

为了补充上述答案,我想纯粹从直观的角度给出我的意见。没有免费午餐 (NFL) ”定理指出,在所有可能的数据分布中平均而言,没有一种算法比另一种更好。但是,由于现实世界的数据集仅限于少数特定分布,因此可以很好地调整某些模型以在现实世界场景中显示高性能。

梯度提升提供了一学习器如果我们假设数据集最好使用混合分布建模,那么这些弱学习器中的每一个都可能只学习在某些分布中表现良好。因此,当你取所有这些弱学习器的平均值时,它在整个数据集上具有非常高的整体性能,而严重过度拟合的单一模型只能在极少数分布或数据集的一部分中表现良好(又名 Wisdom of人群)。

简而言之,单个模型试图泛化并失去预测能力,而多个模型则通过共识进行专业化和改进。这纯粹是我的意见,要么接受,要么离开:)