gpt4 book ai didi

python - Scikit-Learn 给出不正确的 R 平方值

转载 作者:太空宇宙 更新时间:2023-11-04 05:03:28 24 4
gpt4 key购买 nike

我正在 Python 上训练机器学习模型,并使用 Scikit Learn 的 R 平方指标对其进行评估。我决定尝试使用 Scikit 的 r2_score 函数,为它提供一个随机数组,该数组的值与输入 y_true 相同,并且值数组与 y_predict 略有不同但相同。当数组的输入长度为 10 或更大时,我得到任意大(负)值,当输入长度小于 10 时,我得到任意大的(负)值。

from sklearn.metrics import r2_score
r2_score([213.91666667, 213.91666667, 213.91666667, 213.91666667, 213.91666667,
213.91666667, 213.91666667, 213.91666667, 213.91666667, 213.91666667],
[213, 214, 214, 214, 214, 214, 214, 214, 214, 214])

>>> -1.1175847590636849e+26

r2_score([213.91666667, 213.91666667, 213.91666667, 213.91666667,
213.91666667, 213.91666667, 213.91666667, 213.91666667, 213.91666667],
[213, 214, 214, 214, 214, 214, 214, 214, 214])

>>> 0

最佳答案

您注意到 r2_score 输出不正确是正确的。然而,这是一个更简单的计算问题的结果,而不是 scikit-learn 包的问题。

尝试运行

>>> input_list = [213.91666667,  213.91666667,  213.91666667,  213.91666667,  213.91666667, 
213.91666667, 213.91666667, 213.91666667, 213.91666667, 213.91666667]
>>> sum(input_list)/len(input_list)

如您所见,输出不完全是 213.91666667(有限精度错误;您可以阅读更多相关信息 here )。为什么这很重要?

好了,scikit-learn 的部分User Guide给出了用于计算r2_score的具体公式:

r2 formula

如您所见,r2_score 就是 1 -(残差平方和)/(总平方和)。

在您指定的第一种情况下,残差平方和等于某个数字……并不重要。你可以很容易地计算出来;大约0.09,看起来不是特别高。但是,由于上述浮点错误,总平方和 不完全为 0,而是一些非常非常小的数字(大约 10^-28 -- 非常 小)。

因此,当您用残差平方和(大约 0.09)除以总平方和(一个非常小的数)时,您得到一个非常大的数。由于从 1 中减去这个大数,您将得到一个高幅度的负数作为您的 r2_score 输出。

在第二种情况下不会出现总平方和计算中的这种不精确性,因此分母为 0,函数从计算中看到未定义的值,应返回 0。

关于python - Scikit-Learn 给出不正确的 R 平方值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45104158/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com