【问题标题】:Why is scikit-learn r2 score zero?为什么 scikit-learn r2 得分为零?
【发布时间】:2021-05-06 13:10:36
【问题描述】:

我有一个问题,我有一个训练数据集,其中所有 Y 值都是 0.75,我的模型将每行的分数预测为回归 - 但是在计算 r2 时它是零,我不明白为什么

我只发现了 1 个其他类似问题 (Scikit-learn R2 always zero),但应用那里给出的答案对我没有帮助,所以我不确定我哪里出错了。

我拥有的是这样的:

df["Score"] = 0.75
Y = df["Score"] 
df_valid = df.drop(["Score"],1)

y_pred = model.predict(df) #model is random forest regressor from sklearn 

prediction = np.array(y_pred)
training = np.array(Y)

print(prediction)
print(training)


[0.77279743 0.18169051 0.81874664 0.75440987 0.67748983 0.56747803
 0.66120282 0.5829188  0.73471978 0.57745964 0.48272321 0.65313173
 0.805028   0.63791055 0.49677642 0.64341235 0.55456506 0.52329214
 0.67690119 0.79450821 0.63378986 0.69522612 0.69802982 0.6719472
 0.67977281 0.29016943 0.56192242 0.16265814 0.57813068 0.72598279
 0.50255597 0.77138968 0.53745061 0.527479   0.67161703 0.64326146
 0.5299367  0.79977403 0.73527391 0.50858258 0.74660319 0.72315073
 0.71879784 0.55134538 0.61812615 0.64722909 0.67055658 0.68687499
 0.73416035 0.4781765  0.74878142 0.5773583 ]
[0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75
 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75
 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75
 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75]

predictiontraining 都是相同形状的 numpy 数组 - 我还缺少其他东西吗?

当我尝试 print(r2_score(training, prediction)) 时,它给了我 0。

【问题讨论】:

    标签: python scikit-learn regression


    【解决方案1】:

    r2 分数将是0,当y_predictedy_true始终是相同的值。在您的情况下,您总是相同的y_true

    更深入到公式,计算 r2

    和sstot计算为:

    SStot= y_true - ymean
    

    在您的情况下,您的Y_TRUE - Y均值将始终为0,因为(0.75-0.75 = 0)。所以在计算 r2 时,你发现问题 dividing 0

    另一方面,如果您对y预测相同的值,则SSRES和SSTOT会相同,并且您的R2也是0。

    link有关如何计算 r2 的更多信息,它很好地解释

    【讨论】:

    • 谢谢你,我会研究那个链接 - 我对那时不使用r2来评估模型吗?例如,我有均线错误和最大错误的结果,即我可以使用而不是 span>
    • 是的!不要为此数据使用R2。使用您提到的其他类型的测量。 span>
    【解决方案2】:

    R-squared基本上就是模型解释的方差比例,可以看wiki的第一行:

    在统计学中,决定系数,表示为 R2 或 r2 和 发音为“R平方”,是方差的比例 从自变量可预测的因变量 变量。

    您的实际值或观察值仅由一个值组成,没有方差可言,那么为什么要测量 R^2?

    您可能正在尝试检查或测量其他东西,您的模型可以预测具有相似观察值的值,但在该子集上取 R^2 没有意义

    【讨论】:

      猜你喜欢
      • 2016-09-23
      • 2021-06-17
      • 2018-10-17
      • 2019-06-11
      • 2018-07-03
      • 2016-04-14
      • 2014-06-12
      • 2016-04-17
      • 2019-06-20
      相关资源
      最近更新 更多