从numpy.polyfit文档中,它适合线性回归。具体来说,度为’d’的numpy.polyfit与均值函数拟合线性回归
E(y | x)= p_d * x d + p_ {d-1} * x (d-1)+ … + p_1 * x + p_0
因此,您只需要计算该拟合的R平方即可。线性回归的维基百科页面提供了完整的详细信息。您对R
^ 2感兴趣,可以用几种方法来计算,最容易的可能是
SST = Sum(i=1..n) (y_i - y_bar)^2SSReg = Sum(i=1..n) (y_ihat - y_bar)^2Rsquared = SSReg/SST
我将“ y_bar”用作y的均值,并将“ y_ihat”作为每个点的拟合值。
我对numpy并不十分熟悉(我通常在R中工作),因此可能有一种更简洁的方法来计算R平方,但是以下应该是正确的
import numpy# Polynomial Regressiondef 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


