利用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)')

plt.show()

利用numpy自带的polyfit和polyval函数进行回归分析_第1张图片

可以看出未经排列的数据经过回归后与原函数有较好的拟合

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

均方差也不是太大

你可能感兴趣的:(python)