python 最小二乘 leastsq 函數實現
阿新 • • 發佈:2017-05-11
誤差 實現 是個 ipy plt 筆記 matplot otl code
From WizNote
代碼修改自 http://www.cnblogs.com/NanShan2016/p/5493429.html
網上百度了一下,主要是兩個例子,一個利用了多項式函數,一個就是這個。有些細節沒看懂,主要是忽略了p是個參數的數組而非一個數(Python基礎問題),糾結完加上註釋做個筆記
# 修改自 http://www.cnblogs.com/NanShan2016/p/5493429.html
### 最小二乘法 python leastsq###
import numpy as np
from scipy.optimize import leastsq
###采樣點(Xi,Yi)###
Xi=np.array([8.19
,2.72,6.39,8.71,4.7,2.66,3.78])Yi=np.array([7.01,2.78,6.47,6.71,4.1,4.23,4.05])
# p是個數組,表示所有參數!!!
### 定義誤差函數,擬合y=kx+b,p[0]表示k,p[1]表示b
def error(p,x,y):
return (p[0]*x+p[1])-y #x、y都是列表,故返回值也是個列表
###主函數從此開始###
# 可能是使用梯度下降法而非矩陣運算,因此需要給定初始參數p0
p0=[2,2]
Para=leastsq(error,p0,args=(Xi,Yi)) #把error函數中除了p以外的參數打包到args中
k = Para[0][0]
b = Para[0][1]
print("k=",k,‘\n‘,"b=",b)
###繪圖,看擬合效果###
import matplotlib.pyplot as plt
plt.scatter(Xi,Yi,color="red",label="Sample Point",linewidth=3) #畫樣本點
x=np.linspace(0,10,100)
y=k*x+b
plt.plot(x,y,color="orange",label="Fitting Line",linewidth=2) #畫擬合直線
plt.legend()
plt.show()
From WizNote
python 最小二乘 leastsq 函數實現