需要一些數學推導
lambda的確定不太清楚,0.001是試出來的
當函式發生變化時,或者擬合函式最高係數變化時,lambda的取值都應當相應變化
1import
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 通常的最小二乘擬合要求距離的平...