【问题标题】:XGBoost regression RMSE individual predictionXGBoost 回归 RMSE 个体预测
【发布时间】:2021-11-27 06:36:31
【问题描述】:

我有一个简单的回归问题,有两个自变量和一个因变量。我尝试了 statsmodels 和 sk-learn 的线性回归,但我使用 XGBoost 回归器得到了最好的结果(R ^ 2 和 RMSE)。

在新的数据集上,RMSE仍然与之前的结果一致,但个体预测差异很大。

例如,RMSE 为 1000,单个预测值从 20 到 3000 不等。因此,预测要么几乎完全准确,要么在少数情况下严重偏离,但我不知道为什么会这样。

我的问题是,个体预测出现这种差异的原因是什么?

【问题讨论】:

    标签: regression prediction xgboost variations


    【解决方案1】:

    在使用新数据测试您的模型时,出现一些错误的预测是很正常的。由于 RMSE 为 1000,这意味着平均而言,实际值和预测值之间的差异的根为 1000。您可以拥有预测得非常好的值,以及给出非常大的平方误差的值。其原因可能是过拟合。也可能是新数据集包含的数据与训练模型的数据非常不同。但由于 RMSE 与之前的结果一致,我知道 RMSE 在训练集上也约为 1000。因此,我不一定认为测试集有问题。我要做的是完成训练数据的预处理步骤并确保它们正确完成:

    • 标准化数据并消除可能的偏差
    • 检查自变量之间的共线性(你只有 2 个,所以应该很容易做到)
    • 检查自变量是否具有可接受的方差。如果您的变量对于每个新数据点没有太大变化,则它们可能无法解释因变量。

    顺便说一句,您的回归的 R2 分数是多少?它应该告诉您模型解释了目标变量的可变性有多少。较低的 R2 分数应该表明使用的回归量在解释目标变量时不是很有用。

    您可以使用 sklearn 函数StandardScaler() 对数据进行标准化。

    【讨论】:

    • 谢谢。事实上,我在集合中有显着的多重共线性(wif> 10),还有一些异方差,这就是我放弃经典的统计线性回归(OLS statsmodel)并应用XGBoost的原因。据我所知,线性回归的多重共线性和异方差等缺陷对XGBoost回归器的预测能力来说不是问题吗? statsmodel OLS 的 R ^ 2 是 0.90,RMSE 是 3300。对于 XGBost R ^ 2 = 0.99 和 RMSE 是 1114(使用默认参数),使用 K 折交叉验证的平均分数是 0.95。
    • 你是对的,当使用 XGBoost 或任何其他基于树的方法时,共线性不是问题。但是,删除冗余功能是一种很好的做法。我认为过度拟合的一个明显迹象是非常高的 R2 分数(0.99 和 0.95 k 倍)。这表明您的解释变量非常好地解释了目标变量(解释了 99% 的变异性),但存在无法很好地推断模型从未见过的数据的风​​险。您的测试数据(“新”数据)是您训练模型的数据的子集吗?
    • 我认为在这种情况下,主要指标是 RMSE,因为它是关于预测船舶重量的。由于过度拟合,1000(吨)的 RMSE 不太可能太小。这就是为什么我不太担心 R ^ 2,即 0.99,因为问题的本质是它不是一个很好的结果,考虑到它提供了 1000 吨的平均“未命中”,这不是很好好的。另外,据我所知,XGBoost 可以防止过拟合。让我担心的是个体预测的偏差,个体 MSE 就像:[5,1500,12,3,50,4200,30,3150,150]。
    • 我忘了提到测试是在模型没有“看到”的全新套装上完成的。但是,这个新集非常小,只有 8 行。与模型相比,RMSE 的差异非常小。当然,由于我不知道的原因,个人预测仍然存在很大差异。
    • 我真的认为您应该研究如何调整 XGBoost 以免过度拟合。您需要在模型在训练数据上运行良好(R^2 指标)与其推断新数据的能力之间找到平衡。如果新数据的来源与训练数据不同,我会让我的模型不那么具体,但更通用。例如,如果您减少树的最大深度,您是否会在新数据上获得更好的结果?
    猜你喜欢
    • 2018-12-23
    • 2019-10-30
    • 2021-09-01
    • 2019-08-17
    • 1970-01-01
    • 2016-03-17
    • 1970-01-01
    • 2016-06-02
    • 2020-10-01
    相关资源
    最近更新 更多