最小二乘法擬合(python numpy)

2022-09-07 06:57:08 字數 3125 閱讀 9190

最小二乘法least square method,做為分類回歸演算法的基礎,有著悠久的歷史(由馬里·勒讓德於2023年提出)。它通過最小化誤差的平方和尋找資料的最佳函式匹配。利用最小二乘法可以簡便地求得未知的資料,並使得這些求得的資料與實際資料之間誤差的平方和為最小。最小二乘法還可用於曲線擬合。其他一些優化問題也可通過最小化能量或最大化熵用最小二乘法來表達。

一、最小二乘法擬合直線

生成樣本點

首先,我們在直線 y = 3 + 5x 附近生成服從正態分佈的隨機點,作為擬合直線的樣本點。12

3456

78910

importnumpy as np

importmatplotlib.pyplot as plt

# 在直線 y = 3 + 5x 附近生成隨機點

x=np.arange(0,5,0.1)

z=[3+5*xforxinx]

y=[np.random.normal(z,0.5)forzinz]

plt.plot(x, y,'ro')

plt.show()

樣本點如圖所示:

擬合直線

設 y = a0 + a1*x,我們利用最小二乘法的正則方程組來求解未知係數 a0 與 a1。

numpy 的 linalg 模組中有乙個 solve 函式,它可以根據方程組的係數矩陣和方程右端構成的向量來求解未知量。12

3456

78910

1112

13deflinear_regression(x, y):

n=len(x)

sumx=sum(x)

sumy=sum(y)

sumx2=sum(x**2)

sumxy=sum(x*y)

a=np.mat([[n, sumx], [sumx, sumx2]])

b=np.array([sumy, sumxy])

returnnp.linalg.solve(a, b)

a0, a1=linear_regression(x, y)

繪製直線

此時,我們已經得到了擬合後的直線方程係數 a0 和 a1。接下來,我們繪製出這條直線,並與樣本點做對比。12

3456

7# 生成擬合直線的繪製點

_x=[0,5]

_y=[a0+a1*xforxin_x]

plt.plot(x, y,'ro', _x, _y,'b', linewidth=2)

plt.title("y = {} + {}x".format(a0, a1))

plt.show()

擬合效果如下:

python最小二乘法擬合圓 最小二乘法擬合圓

有一系列的資料點 我們知道這些資料點近似的落在乙個圓上。依據這些資料預計這個圓的引數就是乙個非常有意義的問題。今天就來講講怎樣來做圓的擬合。圓擬合的方法有非常多種,最小二乘法屬於比較簡單的一種。今天就先將這樣的。我們知道圓方程能夠寫為 x?xc 2 y?yc 2 r2 通常的最小二乘擬合要求距離的平...

python最小二乘法擬合圓 最小二乘法擬合圓

有一系列的資料點 我們知道這些資料點近似的落在乙個圓上。依據這些資料預計這個圓的引數就是乙個非常有意義的問題。今天就來講講怎樣來做圓的擬合。圓擬合的方法有非常多種,最小二乘法屬於比較簡單的一種。今天就先將這樣的。我們知道圓方程能夠寫為 x?xc 2 y?yc 2 r2 通常的最小二乘擬合要求距離的平...

最小二乘法 直線擬合

功能描述 利用最小二乘法求斜率 xytopx 截距 方法1 xytopy 斜率 ncount 點數 void min2method double xytopy,double xytopx,int x,int y,int ncount graphics.drawline pen,point x i y...