从
numpy.polyfit文档,它是适合的线性回归。具体来说,具有度’d’的numpy.polyfit拟合具有平均函数的线性回归
E(y | x)= p_d * x ** d p_ {d-1} * x **(d-1)… p_1 * x p_0
所以你只需要计算那个拟合的R平方。 linear regression的维基百科页面提供了详细信息。你对R ^ 2感兴趣,你可以用几种方式计算,最简单的可能是
SST = Sum(i=1..n) (y_i - y_bar)^2
SSReg = Sum(i=1..n) (y_ihat - y_bar)^2
Rsquared = SSReg/SST
其中我使用“y_bar”表示y的平均值,“y_ihat”表示每个点的拟合值。
我不是很熟悉numpy(我通常工作在R),所以可能有一个更整洁的方法来计算你的R平方,但以下应该是正确的
import numpy
# Polynomial Regression
def polyfit(x, y, degree):
results = {}
coeffs = numpy.polyfit(x, y, degree)
# Polynomial Coefficients
results['polynomial'] = coeffs.tolist()
# r-squared
p = numpy.poly1d(coeffs)
# fit values, and mean
yhat = p(x) # or [p(z) for z in x]
ybar = numpy.sum(y)/len(y) # or sum(y)/len(y)
ssreg = numpy.sum((yhat-ybar)**2) # or sum([ (yihat - ybar)**2 for yihat in yhat])
sstot = numpy.sum((y - ybar)**2) # or sum([ (yi - ybar)**2 for yi in y])
results['determination'] = ssreg / sstot
return results