我爱编程

最小二乘法least square method

2018-02-03  本文已影响0人  爱吃锅包肉的红小豆

        最小二乘法:求预测数据与真实数据误差平方和最小化的过程。从几何角度看,就是寻找与已知点(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()

     

上一篇下一篇

猜你喜欢

热点阅读