基礎不牢,地動山搖 最小二乘法

2021-09-25 07:51:52 字數 1843 閱讀 9317

第一次聽到最小二乘法是在讀書期間,主要是用來應付期末考試。深入了解它是在擬合曲線的過程中,有的**對最小二乘法進行改進,增加了很多的正則項,以提高擬合度。

總的來說,最小二乘法就是最一種數學優化技術。它通過最小化誤差的平方和尋找資料的最佳函式匹配。實現函式的擬合。比如下圖:

可以通過最小二乘法計算出函式的係數,得到a,b實現函式y=a

+bxy=a+bx

y=a+bx

對這些點的誤差最小。

我覺得他就是個擬合,實在不知道如何簡單的講給別人聽,不過有一篇部落格,講的是夠透徹。

位址是:[url](

做工程,最重要的是能夠利用各種工具。如何使用最小二乘法?我們假設要擬合的函式是:

y =s

in2π

xy=sin2x

y=sin2

πx首先定義出函式:

# 目標函式

defreal_func

(x):

return np.sin(

2*np.pi*x)

# 多項式

deffit_func

(p, x)

: f = np.poly1d(p)

return f(x)

# 殘差

defresiduals_func

(p, x, y)

: ret = fit_func(p, x)

- y return ret

簡單的生成資料,並加點噪音

# 十個點

x = np.linspace(0,

1,10)

x_points = np.linspace(0,

1,1000

)# 加上正態分佈噪音的目標函式的值

y_ = real_func(x)

y =[np.random.normal(0,

0.1)

+ y1 for y1 in y_]

最小二乘法擬合,並把多項式的引數暴露出來。

def

fitting

(m=0):

""" m 為 多項式的次數

"""# 隨機初始化多項式引數

p_init = np.random.rand(m +1)

# 最小二乘法

p_lsq = leastsq(residuals_func, p_init, args=

(x, y)

)print

('fitting parameters:'

, p_lsq[0]

)# 視覺化

plt.plot(x_points, real_func(x_points)

, label=

'real'

) plt.plot(x_points, fit_func(p_lsq[0]

, x_points)

, label=

'fitted curve'

) plt.plot(x, y,

'bo'

, label=

'noise'

) plt.legend(

)return p_lsq

結果展示:

通過可以看出來,多項式的次數越高,擬合的越好,但是也太高的話也會出現過擬合現象。比如說最後一圖,都在噪點上。

基礎不牢,地動山搖 K近鄰演算法 KNN

k近鄰是最為基礎的分類和回歸演算法!他的基本原則就是 對給定的訓練例項點和輸入例項點,首先確定輸入例項點的k kk個最近鄰訓練例項點,然後利用這k kk個訓練例項點的類的多數來 輸入例項點的類。簡單的說就是近朱者赤,近墨者黑。該點周圍的k個點絕大部分是紅色的,那麼它是紅色的概率也大。如果絕大部分是黑...

時間複雜度的計算(基礎不牢,地動山搖)

if foundation is not strong,earth will move and mountain will shake.這個知識點開始沒有太重視,因為做題的時候,肯定會寫自己覺得最優最好的方法啊,就算計算複雜度,過不了,但是這已經是我能寫出的最好的方法了啊,計算了有什麼用呢?但是如果...

C語言(四 指標) 基礎不牢地動山搖!!!

1 指標是什麼?將位址形象化的稱為指標,即位址就是指標,指標就是位址。指標變數是變數 指標變數裡放位址。2 指標定義 指標的定義方式是 type 3 指標 整數 type 指標加1,其實所加的是指標所指向type的大小 即 int p p 1 p sizeof type 指標加n,其實所加的是n倍的...