Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Numpy np.1D:如何计算R^2_Numpy_Linear Regression - Fatal编程技术网

Numpy np.1D:如何计算R^2

Numpy np.1D:如何计算R^2,numpy,linear-regression,Numpy,Linear Regression,我正在用线性回归拟合我的数据。但我想知道如何计算R2值。以下是我到目前为止的代码 total_csv= pd.read_csv('IgG1_sigma_biospin_neg.csv',header=0).iloc[:,:] x_values=(19,20,21,22) y_values=IgG1_sigma_biospin_neg.loc[0, ['19-', '20-', '21-', '22-']].tolist() my_fitting= np.polyfit(x_values,y_

我正在用线性回归拟合我的数据。但我想知道如何计算R2值。以下是我到目前为止的代码

total_csv= pd.read_csv('IgG1_sigma_biospin_neg.csv',header=0).iloc[:,:]
x_values=(19,20,21,22)
y_values=IgG1_sigma_biospin_neg.loc[0, ['19-', '20-', '21-', '22-']].tolist()


my_fitting= np.polyfit(x_values,y_values,1)
my_lin_fitting = np.poly1d(my_fitting) 
my_x=Symbol('x')
print('my_equation:',expand(my_lin_fitting (my_x)))
我得到了数据35.6499591999999*x+6018.6395529的线性拟合方程

In [95]:y_values
Out[95]: [6698.0902240000005, 6733.253559000001, 6757.754712999999, 6808.75637]

你知道如何计算R2值吗?

第一件事-你应该使用类/方法而不是np.polyfit(请参阅np.polyfit上的文档,指导人们使用更新的代码)

然后可以在此处使用polyfit方法。默认情况下,它将只返回系数。如果需要剩余值(R2),则指定
full=True
。polyfit随后还将返回一个列表,其中第一个元素是残差(R2)

上面代码的mod如下所示:

import numpy.polynomial.polynomial as poly

my_fitting, stats = poly.polyfit(x_values,y_values,1, full=True)
R2 = stats[0][0]

据我所知,
np.polyfit
不提供确定系数(R2)

理查德在回答中提到的残差是不同的,称为平方和误差(SSE)。更多信息请点击此处:

好消息是,您可以很容易地从SSE计算R2。首先计算平方和(SST),然后R2仅仅是
R2=1-SSE/SST
。(有关更多说明,请参见上面的链接。)

另一种方法是使用Scikit learn提供的已经实现的功能/

##  Alternative using sklearn
from sklearn.metrics import r2_score

predict = np.poly1d(coeff)
R2 = r2_score(y_values, predict(x_values))
print(R2)

这两种方法给出了完全相同的答案。

为了计算R平方(R2),我使用numpy的var()方法“R2=1.0-(numpy.var(回归误差)/numpy.var(相依数据)),并用它告诉我相依数据方差的分数(y值方差)由模型解释。@JamesPhillips您能否详细说明
回归误差
相关数据
的含义?“回归误差=预测值-y值”,相关数据是“y值”。通过运行此代码,我得到以下消息<代码>my_fitting,stats=np.polyfit(x_值,y_值,1,full=True)
值错误:太多值无法解包(预期为2)
抱歉-我的错误。。。我上面的代码仍然在调用np.polyfit,而不是多项式库!我已将代码更新为调用poly.polyfit(),而不是np.polyfit(),谢谢您的回复。代码现在运行。然而,一定有一些数学错误。我得到的R2比1高131.76636504811702。也许检查一下输入值,然后试着画出系数返回的直线。。。polyfit确实起作用,第一个元素是残差(R^2)值。
##  Alternative using sklearn
from sklearn.metrics import r2_score

predict = np.poly1d(coeff)
R2 = r2_score(y_values, predict(x_values))
print(R2)