最小二乘法:求预测数据与真实数据误差平方和最小化的过程。从几何角度看,就是寻找与已知点(xi,yi)距离平方和最小的拟合曲线h(x)。
h(w,x)=w0+w1*x+w2*x^2+...+wn*x^n
即找到一组(w0,w1...wn)使得h(x)-y的平方和最小。即分别对每一个wi求偏导并令其为0,得到n个等式,从而求解出w0,w1...wn。
leastsq函数用法:
leastsq(error,初始化参数w,args=(xi,yi)),
其中error是误差函数,args存放除w以外的其他参数。
下面列举一个简单的目标函数为y=sin2x拟合函数为多项式函数的最小二乘法代码实现过程:
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import leatsq
#目标函数
y= np.sin(2*x)
#拟合函数
def h(w, x):
return np.poly1d(w)
#残差函数
error = h(w, x)-y
#随机选取几个点作为函数输入
x=np.linspace(0,1,8)
#随机初始化多项式参数
w=np.random.randn(10)
#进行最小二乘法计算
lsq=leatsq(error, w, (xi,yi) )
#打印最佳拟合参数
print lsq(0)
#画出目标曲线和拟合曲线
plt.plot(x, y, lable ='real curve' )
plt.plot(x , h(lsq(0), x), lable='predicted curve')
plt.show()
网友评论