1. 程式人生 > >最小二乘法理解

最小二乘法理解

結果 自己 .net 矩陣 通過 學畫畫 公式 行處理 大學

---------------------
作者:bitcarmanlee
來源:CSDN
原文:https://blog.csdn.net/bitcarmanlee/article/details/51589143


最小二乘是每個上過大學的同學都接觸過的概念與知識點(當然可能純文科的同學沒接觸過,但是一般純文科的同學也不會看這篇文章好像)。最小二乘理論其實很簡單,用途也很廣泛。但是每次說到最小二乘,總感覺差了點什麽似的,好像對於最小二乘的前世今生沒有一個特別詳細與系統的了解。so,本博主趁著周末的時間,趕緊給詳細整理整理,力爭把最小二乘是個什麽鬼做一個特別詳細的說明,爭取讓學英語學中文學歷史學畫畫唱歌的同學都能看明白。

1.最小二乘的背景
這種東東的來源,比較容易找到而且比較靠譜的途徑自然是wiki百科了,以下部分的內容來自wiki百科:
1801年,意大利天文學家朱賽普·皮亞齊發現了第一顆小行星谷神星。經過40天的跟蹤觀測後,由於谷神星運行至太陽背後,使得皮亞齊失去了谷神星的位置。隨後全世界的科學家利用皮亞齊的觀測數據開始尋找谷神星,但是根據大多數人計算的結果來尋找谷神星都沒有結果。時年24歲的高斯也計算了谷神星的軌道。奧地利天文學家海因裏希·奧伯斯根據高斯計算出來的軌道重新發現了谷神星。
高斯使用的最小二乘法的方法發表於1809年他的著作《天體運動論》中,而法國科學家勒讓德於1806年獨立發現“最小二乘法”,但因不為世人所知而默默無聞。兩人曾為誰最早創立最小二乘法原理發生爭執。1829年,高斯提供了最小二乘法的優化效果強於其他方法的證明,見高斯-馬爾可夫定理。

2.舉個最簡單的例子理解最小二乘
現在大家都越來越重視自己的身體健康。現代人最常見的亞健康問題就是肥胖,本博主身體棒棒噠,唯一困擾本博主的健康問題就是超重。(好吧,承認自己是個死胖子就完了)
假設身高是變量X,體重是變量Y,我們都知道身高與體重有比較直接的關系。生活經驗告訴我們:一般身高比較高的人,體重也會比較大。但是這只是我們直觀的感受,只是很粗略的定性的分析。在數學世界裏,我們大部分時候需要進行嚴格的定量計算:能不能根據一個人的身高,通過一個式子就能計算出他或者她的標準體重?
接下來,我們肯定會找一堆人進行采用(請允許我把各位當成一個樣本)。采樣的數據,自然就是各位的身高與體重。(為了方便計算與說明,請允許我只對男生采樣)經過采樣以後,我們肯定會得到一堆數據(x1,y1),(x2,y2),?,(xn,yn)(x1,y1),(x2,y2),?,(xn,yn),其中x是身高,y是體重。
得到這堆數據以後,接下來肯定是要處理這堆數據了。生活常識告訴我們:身高與體重是一個近似的線性關系,用最簡單的數學語言來描述就是y=β0+β1xy=β0+β1x。於是,接下來的任務就變成了:怎麽根據我們現在得到的采樣數據,求出這個β0β0與β1β1呢?這個時候,就輪到最小二乘法發飆顯示威力了。

3.最小二乘的cost function
在講最小二乘的詳情之前,首先明確兩點:1.我們假設在測量系統中不存在有系統誤差,只存在有純偶然誤差。比如體重計或者身高計本身有問題,測量出來的數據都偏大或者都偏小,這種誤差是絕對不存在的。(或者說這不能叫誤差,這叫錯誤)2.誤差是符合正態分布的,因此最後誤差的均值為0(這一點很重要)
明確了上面兩點以後,重點來了:為了計算β0β0,β1β1的值,我們采取如下規則:β0β0,β1β1應該使計算出來的函數曲線與觀察值的差的平方和最小。用數學公式描述就是:
技術分享圖片

其中,yieyie表示根據y=β0+β1xy=β0+β1x估算出來的值,yiyi是觀察得到的真實值。
可能有很多同學就會不服了,憑什麽要用差的平方和最小勒?用差的絕對值不行麽?不要騙我們好不好?
本博主不敢騙大家,為了讓大家相信,特意找了一種本博主認為比較靠譜的解釋:
我們假設直線對於坐標 Xi 給出的預測 f(Xi) 是最靠譜的預測,所有縱坐標偏離 f(Xi) 的那些數據點都含有噪音,是噪音使得它們偏離了完美的一條直線,一個合理的假設就是偏離路線越遠的概率越小,具體小多少,可以用一個正態分布曲線來模擬,這個分布曲線以直線對 Xi 給出的預測 f(Xi) 為中心,實際縱坐標為 Yi 的點 (Xi, Yi) 發生的概率就正比於 EXP[-(ΔYi)^2]。(EXP(..) 代表以常數 e 為底的多少次方)。
所以我們在前面的兩點裏提到,假設誤差的分布要為一個正態分布,原因就在這裏了。
另外說一點我自己的理解:從數學處理的角度來說,絕對值的數學處理過程,比平方和的處理要復雜很多。搞過機器學習的同學都知道,L1正則就是絕對值的方式,而L2正則是平方和的形式。L1能產生稀疏的特征,這對大規模的機器學習灰常灰常重要。但是L1的求解過程,實在是太過蛋疼。所以即使L1能產生稀疏特征,不到萬不得已,我們也還是寧可用L2正則,因為L2正則計算起來方便得多。。。

4.最小二乘法的求解
明確了前面的cost function以後,後面的優化求解過程反倒變得so easy了。
樣本的回歸模型很容易得出:
技術分享圖片

現在需要確定β0β0、β1β1,使cost function最小。學過高數的同誌們都清楚,求導就OK。對於這種形式的函數求導,so easy,so happy…
技術分享圖片


將這兩個方程稍微整理一下,使用克萊姆法則,很容易求解得出:
技術分享圖片

技術分享圖片

因為求和符號比較多,省略了上標與下標。
根據這個公式,就可以求解出相應的參數。
對應上面的身高體重關系的例子,我們只需要將采樣得到的數據,一一代入即可求解。

5.矩陣表達形式
如果我們推廣到更一般的情況,假如有更多的模型變量x1,x2,?,xmx1,x2,?,xm(註意:x1x1是指 一個樣本,x1x1是指樣本裏的一個模型相關的變量),可以用線性函數表示如下:
技術分享圖片

對於n個樣本來說,可以用如下線性方程組表示:
技術分享圖片

如果將樣本矩陣xhixih記為矩陣A,將參數矩陣記為向量ββ,真實值記為向量Y,上述線性方程組可以表示為:

技術分享圖片

6.註意事項
經典的最小二乘法使用起來夠簡單粗暴,計算過程也不復雜。但是一個致命的問題就是其對噪聲的容忍度很低。試想一下,如果前面我們得到的總采樣數據為100個,但是裏面有幾個大胖子,這幾個大胖子就相當於不是普通人的身高-體重系數,他們就是噪聲了。如果不采取一些手段對這幾個噪聲樣本進行處理,最後計算出來的身高-體重系數肯定會比正常值要偏大。
對於噪聲的處理,比如有加權最小二乘等方法,後續有時間跟大家再講講。

最小二乘法理解