为什么我们需要 XGBoost 和随机森林?

数据挖掘 机器学习 数据挖掘 随机森林 决策树 xgboost
2021-10-09 21:14:40

我不清楚几个概念:

  1. XGBoost 将弱学习器转换为强学习器。这样做有什么好处?结合许多弱学习者而不是仅仅使用一棵树?

  2. 随机森林使用树中的各种样本来创建树。这种方法而不是仅仅使用一棵奇异树有什么好处?

3个回答

从第二个问题开始然后转到第一个问题更容易。

装袋

随机森林是一种装袋算法。它减少了方差。

假设您有非常不可靠的模型,例如决策树。(为什么不可靠?因为如果你稍微改变你的数据,创建的决策树可能会有很大的不同。)在这种情况下,你可以通过bagging构建一个健壮的模型(减少方差) —— bagging 是当你创建不同的模型时通过重新采样数据以使生成的模型更加健壮。

随机森林就是我们所说的bagging应用于决策树,但它与其他bagging算法没有什么不同。

你为什么想做这个?这取决于问题。但通常,模型非常稳定是非常理想的。

提升

Boosting 减少了方差,也减少了偏差。它减少了方差,因为您使用了多个模型(装袋)。它通过告诉他之前的模型犯了什么错误(提升部分)来训练后续模型来减少偏差。

有两种主要算法:

  • Adaboost:这是原始算法;你告诉后续模型更严厉地惩罚被先前模型错误的观察
  • 梯度提升:您使用残差(预测值和真实值之间的差异)训练每个后续模型

在这些合奏中,你的基础学习者一定很弱。如果它过度拟合数据,则后续模型将不会有任何残差或错误可供构建。为什么会有这些好模型?好吧,像 Kaggle 这样的网站上的大多数比赛都是使用梯度提升树赢得的。数据科学是一门经验科学,“因为它有效”就足够了。无论如何,请注意提升模型可能会过度拟合(尽管从经验上来说这并不常见)。

特别是梯度提升的另一个原因也很酷:因为它可以很容易地使用不同的损失函数,即使导数不是凸的。例如,在使用概率预测时,您可以使用弹球函数之类的东西作为损失函数;神经网络更难的东西(因为导数总是恒定的)。

[有趣的历史记录:Boosting 最初是一个理论发明,其动机是“我们可以使用较弱的模型来构建更强的模型吗”]


注意:人们有时会混淆随机森林和梯度提升树,只是因为它们都使用决策树,但它们是两个非常不同的集合家族。

构建树时,需要定义一些分割节点的标准。其中包括信息增益和基尼指数等指标。这些是启发式方法,它们不能保证给出最好的分割。

事实上,一些属性的相关性较低和/或噪声较大,以及在真实数据中发生的许多其他问题。简而言之,您无法在适当的计算时间内构建出完美的树(您当然可以构建所有可能的树并测试最好的树,但是即使在中等规模的数据集中也必须等待几年才能进行训练)。

因为我们不能拥有最好的树,所以我们有近似值。一种近似方法是构建许多树(使用不同的数据分区或属性分区),因为我们希望大多数树在某种程度上是正确的,并在投票系统中考虑它们的分类;这应该处理大多数噪声,垂直分区可以处理不相关的属性,启发式的重要性较低,也许还有其他优势。

我会在好的答案中添加一个小的补充。主要问题是过拟合。一旦您拥有多个参数并添加非线性函数,所有算法就会开始过度拟合。他们在数据中看到了一些不存在的东西。就像当它很黑或雾很浓时,人们倾向于在黑暗/雾中看到不存在的东西。几乎所有的计算算法都比人类做的更过拟合。当变量高度相关时,即使是线性回归也开始显示奇怪的系数。如果没有过度拟合,那么这些算法所基于的通常决策树会比随机森林或 XGBoost 更好。

并且没有确切的科学为什么会发生过度拟合以及为什么某些算法比其他算法更好。理论上 ARIMA 模型非常可靠,但实践表明使用指数平滑技术更好,ARIMA 甚至无法区分根据 ARIMA 表现但具有不同参数的变量。

一些神经网络,尤其是卷积神经网络似乎具有较低的过拟合。同时,由于过度拟合,全连接神经网络的原始想法在神经元数量众多的情况下失败了。

对抗过度拟合的主要可能性是:

  1. 随机抽样
  2. 跨多个模型平均
  3. 随机化模型(训练神经网络时随机丢弃神经元)

如果我正确理解算法,随机森林和 XGBoost 都会在多个模型中进行随机采样和平均,从而设法减少过度拟合。

在 ImageNet 图像识别竞赛中,2016 年的最佳模型(Shao 等人)是几个非常好的模型的组合。他们中的一些人在往年的比赛中获胜。该模型的误差比它所基于的任何模型都少 20%。这就是跨多个模型的平均在对抗过度拟合方面的强大之处。