哈嘍各位,春節玩的一定很開心吧。今天這期推送的主題是介紹最小二乘法以及如何利用最小二乘法對已有數據進行擬合。之所以會想到這個主題,是因為前段時間在準備美賽時看到很多最小二乘法的應用,但多數關於其原理的帖子要麼晦澀難懂要麼不夠清楚,就像下面這樣,於是乎萌生出這個想法。
(全文共2479字,我也不知道什麼時候能看完。還有,部分數學符號由於無法顯示就直接用latex語言表示)
我相信很多人都會疑問:最小二乘法是個什麼玩意?可以用來做什麼?直接講最小二乘太過空洞,那我們就先來講講背景。
許多工程問題,常常需要根據兩個變量的幾組實驗數據,來找出這兩個變量的函數關係的近似表達式。就例如化學反應中反應速率與反應物濃度之間存在一定的關係,這種關係沒有明確的數學算式能夠表達出,但我們能夠通過實驗數據進行猜測。通常將尋找這種近似的函數關係式的過程稱為擬合,最終得到的公式稱為經驗公式。
經驗公式建立後,就可以把生產或實驗中所累積的某些經驗提高到理論上加以分析。還是化學反應的例子,若想要在生產速度與成本上取得一個平衡,沒有經驗公式時只能一次一次試。有了經驗公式後,就能以此為基礎建立數學模型進行規劃,省時又省力。
在數據擬合中,有一種方法被廣泛使用,沒錯,就是最小二乘法。最小二乘法,又名最小平方和法,其中,「最小」指的是擬合結果與實際結果誤差最小。那這種誤差怎麼計算?這便是「二乘」,即平方和。連起來說,就是通過將擬合結果與實際結果的誤差的平方和最小化,使擬合結果無限接近於實際結果的方法。
這麼一通解釋,還是有些晦澀,並且又蹦出了些問題:
1. 怎麼列出誤差方程?
2. 怎麼最小化誤差方程?
3. 怎麼驗證結果的準確性?
沒事,接下來我們就著實際例子來講解。
實例1:若有以下兩組數據X、Y,請預測當X為5 時Y可能的值
面對這種情況,我們要做的是根據已知數據,找出X與Y關係式。
首先,根據這兩組數據畫出散點圖,觀察其可能的關係。
由圖1可看出,當X增加時,Y同樣增大,並且整體上呈現線性關係。於是可以假設X與Y的關係式為
之後的目標就相當清晰:根據(2)式解出a與b的值,即可求出X與Y的關係式。
但很可惜,這個方程組是無解的。具體原由可以參考《線性代數》線性方程組部分。
不能得出(2)式的解,這意味著我們不可能找到一條通過上述四個點的直線去精確描述這個關係。BUT,我們可以找到另一條直線,雖然不能滿足所有條件,但能近似地表示這個趨勢。這個近似趨勢可以表示為
式(3)中\hat{Y}表示預測值。
但是又出現了一個問題:如何確定a、b使得這個預測關係最準確?
這裡有個核心思想,就是預測誤差要儘可能的小。同時這也是最小二乘法的核心目標。
我們可以先隨手畫一筆,其中藍線為預測關係,紅線為預測誤差。
圖2.預測關係示意圖1
可見這個預測關係誤差太大,不能採用。
那我們改一改,把藍線往上挪一些,得到圖3。
圖3.預測關係示意圖2
這次誤差就要小很多。可這次的誤差是不是最小的呢?眼睛看不算數,得用數字來證明。
接下來,就利用最小二乘法的思想求解出參數a,b。
Step.1 列寫誤差平方和
當X分別為1、2、3、4時,通過式(3)可以得到對應的預測值Y1、Y2、Y3、Y4。因為式(3)是一個近似關係,那麼預測出的值與實際會存在一定的誤差,可用下式表示:
式中Yi為X取Xi時的實際值;\hat{Yi}為X取Xi時的預測值。
誤差的平方和S則為
記為式(5)。
這裡之所以使用誤差的平方和而不是絕對值,是為了避免絕對值符號在計算中搗亂。
Step.2 求解使S取得最小值的a,b
在式(5)中給出了誤差平方和的計算公式,這是一個關於參數a,b的多元函數。求解多元函數最值的方法是列寫出S對各個參數的偏導,令各個偏導為零組成方程組進行求解。
首先,對各個參數求偏導
當X=5時,Y可能為10.5
那最小二乘法是不是只能擬合出線性關係?不不不,ta能幹的事可多了。
實例2:有以下的數據點,請對X與Y進行擬合併給出關係式
解:
Step.1 畫出散點圖,猜測X與Y的關係
利用MATLAB,得到圖(5):
可以猜測,X與Y具有二次函數的關係,於是將目標擬合式定為
Step.2 列寫誤差平方和的公式
記誤差平方和為S,模仿式(5)可得
其中i為1到10的整數。算式太長,這裡就不做展示。
Step.3 求出S對a,b,c的偏導並令其為零
得到
得出擬合曲線後,我們得檢驗一下此擬合關係式可信度如何。
為此,我們可以計算擬合曲線的均方誤差。具體如下表
偏差的平方和M=4.9612,則均方誤差\sqrt{M}為=2.2274,可見此擬合曲線的誤差還是有點大的。
想要提升擬合精度,一個可行的辦法就是提升數據點的密度,比如將在x=1.5,2.5,3.5等點的數據加入數據集中。這樣的話就能使數據集之間的關係更加明顯。
看到這裡,你是否能夠利用最小二乘法進行數據擬合呢?不會也沒關係,其實現在許多軟體都有擬合功能,輸入數據以及必要的參數就能直接給出最終的結果,賊簡單。最小二乘法有著非常廣泛的應用,例如機器學習中線性回歸的最小二乘法,系統辨識中的最小二乘辨識法,參數估計中的最小二乘法等等,這裡只是介紹了最基礎的用法,廣闊的天地等待你去發現。