我正在尝试在Python中计算coefficient of determination(R ^ 2),但在某些情况下我得到负值。这是否表示我的计算出错?我认为R ^ 2应该在0和1之间。
这是我用于计算的Python代码,直接改编自WP文章:
>>> yi_list = [1, 1, 63, 63, 5, 5, 124, 124]
>>> fi_list = [1.7438055421354988, 2.3153069186947639, 1002.7093097555808, 63.097699219524706, 6.2635465467410842, 7.2275532522971364, 17.55393551900103, 40.8570]
>>> y_mean = sum(yi_list)/float(len(yi_list))
>>> ss_tot = sum((yi-y_mean)**2 for yi in yi_list)
>>> ss_err = sum((yi-fi)**2 for yi,fi in zip(yi_list,fi_list))
>>> r2 = 1 - (ss_err/ss_tot)
>>> r2
-43.802085810924964
答案 0 :(得分:3)
维基百科文章中显示的计算实现对我来说很合适。
根据维基百科的文章:
在0到1范围之外的R2的值可以出现在用于测量观察值和建模值之间的一致性的位置,以及“模拟”值不是通过线性回归获得的,并且取决于使用R2的配方。
查看您的数据,预期模型对63和1002.7093097555808可能是大差异的主要来源。
答案 1 :(得分:1)
看一下这篇文章,我认为这是给定输入数据的预期行为。在介绍中它说:
根据所使用的定义,R2的计算定义可以产生负值的重要情况出现在与相应结果进行比较的预测未使用这些数据的模型拟合程序得出的情况下。
我在公式中看不到任何意味着它总是在0-1范围内的东西。
答案 2 :(得分:1)
不,配方中没有错误。 你的价值不相关(看看y3和f3:63和1002)。
只是为了告诉你R2没有绑定到0,1想象其中一个f接近无限。 Serr也将接近无限,所以R2接近无限。
您是否对X和Y值感到困惑?
(对不起“近乎无限”的位,但我不知道怎么用英语说得更好)
答案 3 :(得分:0)
这是一个计算python中的决定系数的函数:
import numpy as np
def rSquare(estimations, measureds):
""" Compute the coefficient of determination of random data.
This metric gives the level of confidence about the model used to model data"""
SEE = (( np.array(measureds) - np.array(estimations) )**2 ).sum()
mMean = (np.array(measureds)).sum() / float(len(measureds))
dErr = ((mMean - measureds)).sum()
return 1 - (SEE / dErr)