第一次聽到最小二乘法是在讀書期間,主要是用來應付期末考試。深入了解它是在擬合曲線的過程中,有的**對最小二乘法進行改進,增加了很多的正則項,以提高擬合度。
總的來說,最小二乘法就是最一種數學優化技術。它通過最小化誤差的平方和尋找資料的最佳函式匹配。實現函式的擬合。比如下圖:
可以通過最小二乘法計算出函式的係數,得到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倍的...