对于有确定的大概求值范围来说,局部加权回归能更好的拟合数据
简化的公式
参考文献:[]https://blog.csdn.net/z_feng12489/article/details/80213739
代码:
import numpy as np import matplotlib.pyplot as plt x=[[400],[450],[484],[500],[510],[525],[540],[549],[558],[590],[610],[640],[680],[750],[900]] y=[[80],[89],[92],[102],[121],[160],[180],[189],[199],[203],[247],[250],[259],[289],[356]] plt.plot(x,y,'ks') end=[[0],[0]] for i in range(len(x)): x[i].insert(0,1) xx=np.mat(x)#转成矩阵 yy=np.mat(y) end=np.mat([0,0]) end=end.T#矩阵转逆 k=2#加权参数 weight=np.mat(np.eye((len(x)))) for j in range(len(x)): diff=x[6]-xx[j,:] weight[j,j]=np.exp(diff*diff.T/(-2*k**2)) end=(xx.T*(weight*xx)).I*(xx.T*(weight*yy)) end=end.getA().tolist()#矩阵转成列表 print(end) X=[400,900] Y=[] Y.append(end[0][0]+end[1][0]*X[0]) Y.append(end[0][0]+end[1][0]*X[1]) plt.plot(X,Y,'g-') plt.show()
结果图: