import numpy as np
import matplotlib.pyplot as plt
xu=np.random.rand(50)*4*np.pi-2*np.pi
def f(x):
return np.sin(x)+0.5*x
yu=f(xu)
xu和yu是乱序的序列,很难识别出任何结构
print xu[:10].round(2)
print yu[:10],round(2)
[-1.86 -4.99 2.76 -4.03 -0.63 3.18 -1.15 -4.59 -3.76 5.51]
[-1.88952679 -1.5351924 1.75066554 -1.23955484 -0.90002453 1.55075848
-1.4885427 -1.30202286 -1.29928339 2.06068362] 2.0
reg=np.polyfit(xu,yu,5)
ry=np.polyval(reg,xu)
plt.plot(xu,yu,'b^',label='f(x)')
plt.plot(xu,ry,'r.',label='regression')
plt.legend(loc=0)
plt.grid(True)
plt.xlabel('x')
plt.ylabel('f(x)')
plt.show()
可以看出未经排列的数据经过回归后与原函数有较好的拟合
mse=np.sum((f(xu)-ry)**2)/len(xu)
mse
0.030535245451155886
均方差也不是太大