利用numpy自帶的polyfit和polyval函式進行迴歸分析
阿新 • • 發佈:2019-01-29
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)')
<matplotlib.text.Text at 0x7098e50>
plt.show()
可以看出未經排列的資料經過迴歸後與原函式有較好的擬合
mse=np.sum((f(xu)-ry)**2 )/len(xu)
mse
0.030535245451155886
均方差也不是太大