python – `scikit-learn`的`r2_score`和R ^ 2计算之间的显着不匹配

python – `scikit-learn`的`r2_score`和R ^ 2计算之间的显着不匹配,第1张

概述题 为什么r2_score function in scikit-learn和Coefficient of Determination as described in Wikipedia的公式之间存在显着差异?哪个是正确的? 上下文 我正在使用Python 3.5来预测线性和二次模型,而我正在尝试的适合度的衡量标准之一是.但是,在测试时,scikit-learn中的r2_score指标与维基百科中

为什么r2_score function in scikit-learn和Coefficient of Determination as described in Wikipedia的公式之间存在显着差异?哪个是正确的?

上下文

我正在使用Python 3.5来预测线性和二次模型,而我正在尝试的适合度的衡量标准之一是.但是,在测试时,scikit-learn中的r2_score指标与维基百科中提供的计算之间存在显着差异.

我在这里提供我的代码作为参考,它计算上面链接的维基百科页面中的示例.

from sklearn.metrics import r2_scoreimport numpyy = [1,2,3,4,5]f = [1.9,3.7,5.8,8.0,9.6]# Convert to numpy array and ensure double precision to avoID single precision errorsobserved = numpy.array(y,dtype=numpy.float64)predicted = numpy.array(f,dtype=numpy.float64)scipy_value = r2_score(observed,predicted)>>> scipy_value: 

很明显,scipy计算值为-3.8699999999999992,而维基百科中的参考值为0.998.

谢谢!

更新:这与this question about how R^2 is calculated in scikit-learn的不同之处在于我正在努力理解并澄清两种结果之间的差异.这个问题表明scikit中使用的公式与维基百科的公式相同,不应该导致不同的值.

更新#2:事实证明我在阅读维基百科文章的例子时犯了一个错误.下面的答案和评论提到我提供的示例是针对示例中(x,y)值的线性,最小二乘拟合.为此,维基百科的文章中的答案是正确的.为此,提供的R ^ 2 calue为0.998.对于两个向量之间的R ^ 2,scikit的答案也是正确的.非常感谢你的帮助!

解决方法 引用的问题是正确的 – 如果您通过计算剩余的平方和和总平方和,则得到与sklearn相同的值:

In [85]: import numpy as npIn [86]: y = [1,5]In [87]: f = [1.9,9.6]In [88]: SSres = sum(map(lambda x: (x[0]-x[1])**2,zip(y,f)))In [89]: sstot = sum([(x-np.mean(y))**2 for x in y])In [90]: SSres,sstotOut[90]: (48.699999999999996,10.0)In [91]: 1-(SSres/sstot)Out[91]: -3.8699999999999992

负值背后的想法是,如果你每次只预测平均值(这对应于r2 = 0),你就更接近实际值.

总结

以上是内存溢出为你收集整理的python – `scikit-learn`的`r2_score`和R ^ 2计算之间的显着不匹配全部内容,希望文章能够帮你解决python – `scikit-learn`的`r2_score`和R ^ 2计算之间的显着不匹配所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1194225.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存