XGBoost - 我们能否找到一个比 RMSE“更好”的回归目标函数?

机器算法验证 机器学习 大车 梯度下降 助推 坡度
2022-04-11 10:37:14

如果我们回想一下线性模型,我们有普通最小二乘法 (OLS) 与广义线性模型 (GLM)。不用太深入,可以说 GLM 通过放宽一些假设来“改进”OLS,使其对不同类型的数据更加稳健。底层的训练算法也有些不同;OLS 最小化均方根误差 (RMSE),而 GLM 最小化偏差(我意识到 RMSE 是偏差的一个特例)。这使我们能够基于伽马分布、逆高斯等建立线性模型。

我的问题是:对于梯度提升树,同样的逻辑是否成立?由于我们现在正在使用基于树的算法,我认为它不受与线性模型相同的假设/分布限制。例如,在 XGBoost 包中,回归的默认目标函数是 RMSE。如果您愿意,您可以定义自定义目标,但这有关系吗?这样做有意义吗?

换句话说,我们是否可以通过将 XGBoost 设置为最小化偏差(例如,伽马分布)与 RMSE 来提高我们的预测能力?

3个回答

同样的逻辑适用于梯度提升树吗?

是的,无论如何。梯度提升可用于最小化任何合理的损失函数,并且这样做非常有效。

值得一提的是,一般选择广义线性模型时不会考虑损失/效用函数(这回答了这个问题:我的模型做得如何/它的错误有多糟糕),而是你想要建模的随机变量的种类。然后,例如,如果您有一个目标变量,它是在一段时间内注册的某种事件的数量,那么使用泊松模型是有意义的。如果您有丰富的复杂数据集,Xgboost 可以比 GLM 更好地建模泊松响应。

如果您愿意,您可以定义自定义目标,但这有关系吗?

当然可以,但我想指出的是,树是完全非线性的(对函数形式没有限制),因此用 MSE 损失训练的模型通常可以做得很好,即使用完全不同的分数来判断功能,甚至用于分类任务!但是,MSE 始终是对称的,并且当情况需要对一条尾巴进行加权时(例如对于 gamma 回归,或对于二元回归,当接近极端时)MSE 不是最优的,并且性能不如最合适的损失函数。

但它是什么?

这取决于你的目标。对于普通回归,MSE 是一个值得赞赏的选择,因为它对目标变量的条件均值进行建模,这通常是目标,它受益于与高斯变量和中心极限定理的概念联系,它速度很快,而且实际上非常稳健. 这当然并不意味着你必须使用它,它只是一个很好的标准,但每个问题都是不同的,很多时候你不想预测条件均值。例如,您可能需要预测某个度量的数量级,然后 MSE 应该应用于该变量的对数,或者您可能会遇到异常值很常见并且不应该比其他残差更影响预测的情况,在这种情况下 MAE 是一个更好的损失。你不能把它们都列出来,因为它们有无数个!

要回答您的问题,您需要定义什么是“更好”。如果您的目标是以平方距离测量的伽马分布变量的距离更小,那么您应该以这种方式构建目标函数。一个非常常见的问题是找到一个最小化平均绝对误差的解决方案。该成本函数与 RMSE 不同,使用不同的目标函数有助于最小化 MAE。

好吧,在Gradient Boosting的原始论文中,Friedman 提出了一些 RMSE(或 L2 损失)的替代方案,用于实现 Boosted Trees 中的损失函数。

这些是最小绝对偏差(相当于 MAE,如前面的答案中所述)和 M-Regression,它使用Huber Loss代替,例如在异常值的情况下可能会更好。

通常,您可以定义具有任何损失的梯度提升树,只要它尊重一些连续性约束并且您能够计算它的导数。
同样重要的是要注意,您还在树构建过程中使用了损失函数,而不仅仅是提升过程,因此那里的更改也会影响树的构建方式,并且对两者使用相同的损失是有意义的脚步