天天看點

最小二乘法(least squares)

都忘了,再回顧一下:

參考知乎 https://www.zhihu.com/question/20447622 該問題下面的部分回答:

建議有時間的把問題下面的所有答案都過一遍,這樣可以通過不同的切入點來更好的了解。

最小二乘法,也叫最小平方法,在古漢語中“平方”稱為“二乘”,“最小”指的是參數的估計值要保證各個觀測點與估計點的距離的平方和達到最小。(記得赟哥解釋過,這個方法起源于日本,就直接拿過來用了,其實最小平方法更好了解一點)

最小二乘作為一種損失函數,也用做曲線拟合(曲線拟合求參數也是利用最小化平方的方法,其實也是作為一種損失函數,兩個作用可以認為是一緻的)

在直線的 y = ax + b中,通過給定的幾個點(x1, y1), (x2, y2), (x3, y3)然後求出參數 (a, b), 根據給出的點列出方程組,然後令:

S(a,b)=(y1−(ax1+b))2+(y2−(ax2+b))2+(y3−(ax3+b))2

然後使 S(a,b) 最小化, 對a 和 b 分别求偏導,令其等于0, 求得a 和 b 的估計值。

上面這個過程是不是跟極大似然估計(MLE)的過程有點像,下面我們再回顧一下MLE做一下對比:

首先MLE使在已知分布的條件下根據一些樣本來估計參數的方法:

将 y = ax + b 擴充到多元的情況,

f(x)=∑dj=1xjwj+ϵ=xw⊺+ϵ

其中 xj∈ℝ1×d , w∈ℝ1×n , y∈ℝ1×n , X =(x1, x2, …, xn), 假設 ϵi∼(0,σ2) , 則 yi∼(xw,σ2) , 現在要估計w的值:

argmaxwL(w)=ln∏i=1n1σ2π‾‾‾√exp(−12(yi−xiw⊺σ)2)=−12σ2∑i=1n(yi−xiw⊺)2−nlnσ2π‾‾‾√

argminwf(w)=∑ni=1(yi−xiw⊺)2=∥∥y−Xw⊺∥∥22

這不就是最小二乘麼(公式來源于: https://www.zhihu.com/question/20447622/answer/25186207)

其實最小二乘就是歐式距離的損失函數的主體部分, 就是最小平方誤差的方法來估計參數的方法。

對于多元的曲線拟合線性求解方法(https://en.wikipedia.org/wiki/Linear_least_squares_(mathematics)):

∑nj=1Xijβj=yi, (i=1,2,…,m)

寫成向量形式就是:

Xβ=y

則損失函數:

S(β)=∥∥y−Xβ∥∥2

估計值 β̂ 

β̂ =argminβS(β),

對 β 求微分得:

β̂ =(XTX)−1XTy.

python代碼;

import numpy as np
import matplotlib.pyplot as plt
input = np.array([
    [, ],
    [, ],
    [, ],
    [, ]
])
m = np.shape(input)[]
X = np.matrix([np.ones(m), input[:,]]).T
y = np.matrix(input[:,]).T
#直接代入公式
betaHat = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)
print(betaHat)
plt.figure()
xx = np.linspace(, , )
yy = np.array(betaHat[] + betaHat[] * xx)
plt.plot(xx, yy.T, color='b')
plt.scatter(input[:,], input[:,], color='r')
plt.show()
           

繼續閱讀