在《回归拟合(一)》中,完成了一次回归。如果做高次回归呢?其实可以将高次回归转化为一次回归。思路如下:
按照这个思路,撰写代码:
import numpy as np
import statsmodels.api as sm
# 先自己模拟一些散点分布在 y=1+0.1x+10x*x 周围
nsample=100
x=np.linspace(0,10,nsample)
X=np.column_stack((x,x**2))
X=sm.add_constant(X)
beta=np.array([1,0.1,10])
e=np.random.normal(size=nsample)
y=np.dot(X,beta)+e
# 将模拟的散点拟合成回归模型
model=sm.OLS(y,X)
result=model.fit()
print u'打印拟合出的参数'
print result.params
print u'打印全部摘要'
print result.summary()
执行结果:
将模拟的散点和拟合的函数曲线绘制在图像中:
import matplotlib.pyplot as plt
import matplotlib as mpl
y_fitted=result.fittedvalues
mpl.rcParams['figure.figsize']=(640/72,320/72)
plt.plot(x,y,'o',label='data')
plt.plot(x,y_fitted,'r--.',label='OLS')
plt.legend(loc='best')
plt.savefig('ols.jpg')
目测拟合效果相当好。