加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-20 12:09:29 所属栏目:Python 来源:网络整理
导读:题 为什么 r2_score function in scikit-learn和Coefficient of Determination as described in Wikipedia的公式之间存在显着差异?哪个是正确的? 上下文 我正在使用Python 3.5来预测线性和二次模型,而我正在尝试的适合度的衡量标准之一是.但是,在测试时,sc

为什么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_score
import numpy

y = [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 errors
observed = 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 np

In [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,SStot
Out[90]: (48.699999999999996,10.0)

In [91]: 1-(SSres/SStot)
Out[91]: -3.8699999999999992

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读