为什么^{
我使用Python3.5来预测线性和二次模型,我正在尝试的拟合优度度量之一是。然而,在测试时,scikit-learn
中的r2_score
度量与Wikipedia中提供的计算有显著的区别。
我在这里提供我的代码作为参考,它计算上面链接的维基百科页面中的示例。
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
,而Wikipedia中的参考值是0.998
。
谢谢你!
更新:这与this question about how R^2 is calculated in scikit-learn不同,因为我试图理解并澄清的是两个结果之间的差异。这个问题说明scikit中使用的公式与Wikipedia中使用的公式相同,不应导致不同的值。
更新#2:结果我在阅读维基百科文章的示例时出错。下面的回答和评论提到,我提供的示例是示例中(x,y)值的线性最小二乘拟合。为此,维基百科文章中的答案是正确的。为此,提供的R^2计算值为0.998。对于两个向量之间的R^2,scikit的答案也是正确的。非常感谢你的帮助!
确定系数有效地将数据中的方差与残差中的方差进行比较。残差是预测值和观测值之间的差,其方差是该差的平方和。
如果预测是完美的,残差的方差为零。因此,确定系数是1。如果预测结果不理想,则残差部分为非零,残差方差为正。因此,确定系数小于1。
显然,玩具问题的决定系数很低,因为大多数预测值都相差很远。测定
-3.86
的系数意味着残差的方差是观测值方差的4.86
倍。0.998
值来自数据集的线性最小二乘拟合的确定系数。这意味着观测值与预测值之间通过一个线性关系(加上一个常数)进行关联,该线性关系将残差的方差最小化。玩具问题的观测值和预测值具有高度的线性相关性,因此线性最小二乘拟合的确定系数非常接近于1。我认为你误解了维基百科。维基百科上的例子并没有说明:
相反,它说线性最小二乘的
R^2
适合于数据:等于
0.998
考虑一下这个脚本,它首先使用^{} 来找到最小二乘拟合,然后使用这两种方法来为这两种情况找到0.998的
R^2
:所提到的问题是正确的——如果您计算剩余平方和和和平方和,您得到的值与sklearn相同:
负值背后的想法是,如果你只是预测了每次的平均值(这将对应于r2=0),你就会更接近实际值。
相关问题 更多 >
编程相关推荐