最小二乘法 非線性擬合 正則化 python實現

2022-09-14 17:48:15 字數 1992 閱讀 6012

需要一些數學推導

lambda的確定不太清楚,0.001是試出來的

當函式發生變化時,或者擬合函式最高係數變化時,lambda的取值都應當相應變化

1

import

numpy as np

2import

matplotlib.pyplot as plt

34 plt.rcparams['

font.sans-serif

'] = ['

simhei']

5 plt.rcparams['

axes.unicode_minus

'] =false6#

處理中文亂碼78

9def

init_fx_data():

10 x = np.arange(0, 1, 0.1)

11 y = [np.sin(2.0*np.pi*x) + (np.random.randint(low=-30, high=30) / 100) for x in x]

12return

x, y

1314

15def

filling_x_y(xs, ys, m):

16 x, y =,

17for x in

xs:18 row = [x ** (i + 1) for i in

range(m)]

1920

for y in

ys:21

22return

np.array(x), np.array(y)

2324

25def

draw_figure(xs, ys, a, n):

26 p = plt.figure().add_subplot(111)

27 x, y = np.arange(min(xs), max(xs), 0.01),

28for i in

range(0, len(x)):

29 y = 0.0

30for k in

range(0, n):

31 y += a[k] * x[i] ** (k + 1)

3233 p.plot(x, y, color='

r', linestyle='

-', marker='', label='

多項式擬合曲線')

34 p.plot(xs, ys, color='

b', linestyle='', marker='

.', label='

曲線真實資料')

35 plt.title(s='

最小二乘法擬合多項式n={}的函式曲線f(x)

'.format(n))

36 plt.legend(loc="

best

") #

新增預設圖例到合適位置

37plt.show()

3839

40if

__name__ == '

__main__':

41 x, y =init_fx_data()

42 order = 10

43 lambda = 0.001

44 x, y =filling_x_y(x, y, order)

4546 w1 =np.linalg.inv(x.t @ x) @ x.t @ y

47 p1 =draw_figure(x, y, w1, order)

4849 w2 = np.linalg.inv(x.t @ x + lambda *np.eye(order)) @ x.t @ y

50 p2 = draw_figure(x, y, w2, order)

線性擬合最小二乘法Python實現

下面 實現的是最小二乘法線性擬合,並且包含自己造的輪子與別人造的輪子的結果比較。問題 對 y 2.5x 0.8 y 2.5x 0.8 直線附近的帶有雜訊的資料進行線性擬合,最終求出w,b的估計值。最小二乘法基本思想是使得樣本方差最小。中self func 函式為自定義擬合函式,skl func 為呼...

Python例項 線性最小二乘法擬合

coding utf 8 線性最小二乘擬合 from future import division from scipy import linalg as la from scipy import optimize import sympy import numpy as np sympy.init...

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

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