【问题标题】:sklearn-metrics of regression reasonable while cross-validation returns huge numbersklearn-metrics 回归合理,而交叉验证返回大量数据
【发布时间】:2020-08-27 03:47:56
【问题描述】:

我是一名初学者,正在学习 Aurelien Geron 书中关于 SKLEARN 的 ML 的教程。 使用以下内容测试我的预测时:

from sklearn.metrics import mean_squared_error

listings_predictions = lin_reg.predict(listings_prepared)
lin_mse = mean_squared_error(listings_labels, listings_predictions)
lin_rmse = np.sqrt(lin_mse)
lin_rmse

我收到51.96。 (看起来很合理)

现在,当我运行相同方法的交叉验证时,我正在从这个世界中获取值:

lin_scores = cross_val_score(lin_reg, listings_prepared, listings_labels,
                             scoring="neg_mean_squared_error", cv=10)
lin_rmse_scores = np.sqrt(-lin_scores)
display_scores(lin_rmse_scores)


   Scores: [5.33624445e+01 2.96290932e+10 5.25981399e+01 5.29672973e+01
     1.26397404e+11 5.17644346e+01 5.10301124e+01 5.45672660e+01
     6.69753606e+11 4.29844291e+11]
    Mean: 125562439481.52774
    Standard deviation: 221930379288.67526

您能建议在哪里寻找问题的根源吗?回归怎么会“有点偏离”,而相同的交叉验证要高出十亿倍?

【问题讨论】:

  • 检查数据集的异常值

标签: python machine-learning scikit-learn data-science


【解决方案1】:

要重新格式化您的交叉验证分数,它们是: 53.3624445 29629093200.0 52.5981399 52.9672973 126397404000.0 51.7644346 51.0301124 54.567266 669753606000.0 429844291000.0

就像 BlackBear 所说,这表明您的四个 CV 分区中可能存在一些异常值。这些是每次交叉验证运行的测试集上的错误分数,因此,如果其中一个异常值,则意味着该模型在其训练集中没有可以从中学习的示例。当您在没有 CV 的情况下使用所有数据进行训练时,模型会从这些异常示例中学习。

【讨论】:

    猜你喜欢
    • 2023-04-02
    • 2016-09-30
    • 2016-06-27
    • 2017-11-12
    • 2017-12-22
    • 2017-07-07
    • 2017-11-24
    • 2016-05-30
    • 1970-01-01
    相关资源
    最近更新 更多