Python知識 7 最小二乘求解

2021-09-25 20:12:54 字數 2133 閱讀 3640

這裡展示利用python實現的最小二乘的直接求解方法。其求解原理,請參考:最小二乘法擬合非線性函式及其matlab/excel 實現

1.一般曲線擬合

**如下:

#

-*- coding:utf-8 -*-

'''created on feb 20, 2017

最小二乘擬合 給定的函式 fit_fun(x)

已知資料x(2xn),y(1xn),可直接計算直線的引數a和b

直接計算的公式:ab = inv(xxt)*x*yt

@author: xiankai chen

@email: [email protected]

'''import

numpy as np

import

matplotlib.pyplot as plt

deffun2ploy(x,n):

'''資料轉化為[x^0,x^1,x^2,...x^n]

'''lens =len(x)

x = np.ones([1,lens]);

for i in range(1,n):

x =np.vstack((x,np.power(x,i)))

return

x def

leastseq_byploy(x,y,ploy_dim):

'''最小二乘求解

'''#

散點圖 plt.scatter(x,y,color="

r",marker='

o',s = 50)

x =fun2ploy(x,ploy_dim);

#直接求解

xt =x.transpose();

xxt=x.dot(xt);

xxtinv =np.linalg.inv(xxt)

xxtinvx =xxtinv.dot(x)

coef =xxtinvx.dot(y.t)

y_est =xt.dot(coef)

return

y_est,coef

deffit_fun(x):

'''要擬合的函式

'''#

return np.power(x,5)

return

np.sin(x)

#return 5*x+3

if__name__ == '

__main__':

data_num = 100;

ploy_dim =10;

noise_scale = 0.2;

## 資料準備

x = np.array(np.linspace(-2*np.pi,2*np.pi,data_num))

y = fit_fun(x)+noise_scale*np.random.rand(1,data_num)

#最小二乘擬合

[y_est,coef] = leastseq_byploy(x,y,10)

#顯示擬合結果

org_data = plt.scatter(x,y,color="

r",marker='

o',s = 50)

est_data = plt.plot(x,y_est,color="

b",linewidth= 3)

plt.xlabel("x

")plt.ylabel("y

")plt.title(

"fit funtion with leastseq method")

plt.legend([

"noise data

","fited function

"]);

plt.show()

結果圖示

當維度增加求解矩陣的你運算會消耗較大的計算資源,通常採用梯度下降法,牛頓法等數值迭代演算法進行求解。

Python知識 7 最小二乘求解

這裡展示利用python實現的最小二乘的直接求解方法。其求解原理,請參考 最小二乘法擬合非線性函式及其matlab excel 實現 1.一般曲線擬合 如下 coding utf 8 created on feb 20,2017 最小二乘擬合 給定的函式 fit fun x 已知資料x 2xn y ...

線性回歸 最小二乘求解

線性回歸 線性回歸用於數值 它的主要思想是利用預定的權值將屬性進行線性組合來表示類別 y w0 w1x1 w2x2 wnxn 其中,y是類別屬性值,x1,x2,xn是一般屬性值,w1,w2,xn是權值,w0稱為偏置,類似於一元線性回歸y ax b中b。求解線性回歸就是通過已知的一些資料點 1,xi1...

原 python最小二乘

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...