1. 程式人生 > >利用numpy自帶的polyfit和polyval函式進行迴歸分析

利用numpy自帶的polyfit和polyval函式進行迴歸分析

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()

png

可以看出未經排列的資料經過迴歸後與原函式有較好的擬合

mse=np.sum((f(xu)-ry)**2
)/len(xu)
mse
0.030535245451155886

均方差也不是太大