我使用Python和Numpy计算任意次的最佳拟合多项式。我将传递一个x值、y值和要拟合的多项式次数(线性、二次等)的列表。
这很有用,但我也想计算r(相关系数)和r平方(决定系数)。我正在将我的结果与Excel的最佳拟合趋势线功能以及它计算的r平方值进行比较。利用这个,我知道我计算的r平方是正确的线性最佳拟合(度等于1)。但是,我的函数不适用于阶数大于1的多项式。
Excel能够做到这一点。如何使用Numpy计算高阶多项式的r平方?
这是我的功能:
import numpy
# Polynomial Regression
def polyfit(x, y, degree):
results = {}
coeffs = numpy.polyfit(x, y, degree)
# Polynomial Coefficients
results['polynomial'] = coeffs.tolist()
correlation = numpy.corrcoef(x, y)[0,1]
# r
results['correlation'] = correlation
# r-squared
results['determination'] = correlation**2
return results
很晚才回复,但万一有人需要一个现成的函数:
scipy.stats.linregress
即
就像亚当·马普莱斯的回答一样。
来自yanl(另一个库)} 函数
sklearn.metrics
有一个^{从numpy.polyfit文档来看,它适合线性回归。具体来说,具有“d”度的numpy.polyfit与均值函数的线性回归拟合
E(y | x)=p_d*x**d+p_d{d-1}*x**(d-1)+。。。+1*x+0磅
所以你只需要计算R的平方。关于linear regression的维基百科页面提供了完整的细节。你对R^2感兴趣,你可以用几种方法来计算,最简单的可能是
其中,我使用“y_bar”作为y的平均值,“y_ihat”作为每个点的拟合值。
我对numpy不是很熟悉(我通常在R中工作),所以可能有一种更整洁的方法来计算R平方,但是以下应该是正确的
相关问题 更多 >
编程相关推荐