最小二乘
1.最小二乘的背景
這種東東的來源,比較容易找到而且比較靠譜的途徑自然是wiki百科了,以下部分的內容來自wiki百科:?
1801年,意大利天文學家朱賽普·皮亞齊發現了第一顆小行星谷神星。經過40天的跟蹤觀測后,由于谷神星運行至太陽背后,使得皮亞齊失去了谷神星的位置。隨后全世界的科學家利用皮亞齊的觀測數據開始尋找谷神星,但是根據大多數人計算的結果來尋找谷神星都沒有結果。時年24歲的高斯也計算了谷神星的軌道。奧地利天文學家海因里希·奧伯斯根據高斯計算出來的軌道重新發現了谷神星。?
高斯使用的最小二乘法的方法發表于1809年他的著作《天體運動論》中,而法國科學家勒讓德于1806年獨立發現“最小二乘法”,但因不為世人所知而默默無聞。兩人曾為誰最早創立最小二乘法原理發生爭執。1829年,高斯提供了最小二乘法的優化效果強于其他方法的證明,見高斯-馬爾可夫定理。
2.舉個最簡單的例子理解最小二乘
現在大家都越來越重視自己的身體健康。現代人最常見的亞健康問題就是肥胖,本博主身體棒棒噠,唯一困擾本博主的健康問題就是超重。(好吧,承認自己是個死胖子就完了)?
假設身高是變量X,體重是變量Y,我們都知道身高與體重有比較直接的關系。生活經驗告訴我們:一般身高比較高的人,體重也會比較大。但是這只是我們直觀的感受,只是很粗略的定性的分析。在數學世界里,我們大部分時候需要進行嚴格的定量計算:能不能根據一個人的身高,通過一個式子就能計算出他或者她的標準體重??
接下來,我們肯定會找一堆人進行采用(請允許我把各位當成一個樣本)。采樣的數據,自然就是各位的身高與體重。(為了方便計算與說明,請允許我只對男生采樣)經過采樣以后,我們肯定會得到一堆數據(x1,y1),(x2,y2),?,(xn,yn),其中x是身高,y是體重。?
得到這堆數據以后,接下來肯定是要處理這堆數據了。生活常識告訴我們:身高與體重是一個近似的線性關系,用最簡單的數學語言來描述就是y=β0+β1x。于是,接下來的任務就變成了:怎么根據我們現在得到的采樣數據,求出這個β0與β1呢?這個時候,就輪到最小二乘法發飆顯示威力了。
3.最小二乘的cost function
在講最小二乘的詳情之前,首先明確兩點:1.我們假設在測量系統中不存在有系統誤差,只存在有純偶然誤差。比如體重計或者身高計本身有問題,測量出來的數據都偏大或者都偏小,這種誤差是絕對不存在的。(或者說這不能叫誤差,這叫錯誤)2.誤差是符合正態分布的,因此最后誤差的均值為0(這一點很重要)?
明確了上面兩點以后,重點來了:為了計算β0,β1的值,我們采取如下規則:
β0,β1應該使計算出來的函數曲線與觀察值的差的平方和最小。用數學公式描述就是:?
其中,yie表示根據y=β0+β1x估算出來的值,yi是觀察得到的真實值。
可能有很多同學就會不服了,憑什么要用差的平方和最小勒?用差的絕對值不行么?不要騙我們好不好??
本博主不敢騙大家,為了讓大家相信,特意找了一種本博主認為比較靠譜的解釋:?
我們假設直線對于坐標 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、β1,使cost function最小。學過高數的同志們都清楚,求導就OK。對于這種形式的函數求導,
將這兩個方程稍微整理一下,使用克萊姆法則,很容易求解得出:
因為求和符號比較多,省略了上標與下標。?
根據這個公式,就可以求解出相應的參數。?
對應上面的身高體重關系的例子,我們只需要將采樣得到的數據,一一代入即可求解。
?
5.矩陣表達形式
如果我們推廣到更一般的情況,假如有更多的模型變量x1,x2,?,xm(注意:x1是指 一個樣本,x1是指樣本里的一個模型相關的變量),可以用線性函數表示如下:?
?
對于n個樣本來說,可以用如下線性方程組表示:
如果將樣本矩陣記為矩陣A,將參數矩陣記為向量β,真實值記為向量Y,上述線性方程組可以表示為:
即Aβ=Y
對于最小二乘來說,最終的矩陣表達形式可以表示為:
最后的最優解為:
6.注意事項
經典的最小二乘法使用起來夠簡單粗暴,計算過程也不復雜。但是一個致命的問題就是其對噪聲的容忍度很低。試想一下,如果前面我們得到的總采樣數據為100個,但是里面有幾個大胖子,這幾個大胖子就相當于不是普通人的身高-體重系數,他們就是噪聲了。如果不采取一些手段對這幾個噪聲樣本進行處理,最后計算出來的身高-體重系數肯定會比正常值要偏大。?
對于噪聲的處理,比如有加權最小二乘等方法,后續有時間跟大家再講講。
?
?
總結
- 上一篇: OpenCV imread()函数
- 下一篇: OpenCV测试程序