最小二乘法,又是乙個即熟悉又陌生的名字。對於學工科的我,簡直就是聽著最小二乘長大的(汗。。。)。但是,之前碰到要用最小二乘法的時候,我採取的辦法都是拿來主義(抄。。。),並沒有系統的了解一下什麼是最小二乘法。包括最小二乘這個叫法,也從來都不理解(一直以為是乙個外來詞彙的音譯翻譯。。。)。所以,每次碰到最小二乘法,都是一臉懵bi。再加上拖延症(其實就是懶。。)作祟,最小二乘就像神一般的存在我的腦海中。直到有一天(此處省略500字。。。。),於是有了本篇文章。
———————————————分割線—————————————————
言歸正傳,在此先列舉一下最小二乘家族成員。最小二乘法直線擬合,最小二乘法多項式(曲線)擬合,機器學習中線性回歸的最小二乘法,系統辨識中的最小二乘辨識法,引數估計中的最小二乘法,等等。由此可見,我們每次碰到的都是最小二乘法這個多面體的其中乙個面。如果只從單個面研究,就看不到它的整體,也就不能理解它的內涵。因此,為了搞明白這個多面體,我們就要從它的核心入手,剖析它最本質的內容。
先從最小二乘的名字來看,所謂最小二乘,其實也可以叫做最小平方和。那麼,是什麼的平方和最小呢?那肯定是誤差最小,那是什麼的誤差呢?就是目標物件和擬合物件的誤差。連起來看,就是通過最小化誤差的平方和,使得擬合物件無限接近目標物件,這就是最小二乘的核心思想。可以看出,最小二乘解決的是一類問題,就是需要擬合現有物件的問題。這麼看來,是不是也就可以理解為什麼最小二乘應用如此廣泛了呢。
解釋完了最小二乘的思想,下面就具體說一說最小二乘的方法(方法其實是將思想具體化)。從最小二乘思想中,我們可以提出以下幾個問題。
1.
怎麼列出誤差方程
?2. 怎麼最小化誤差方程?
3. 怎麼驗證結果的準確性?
最小二乘法的核心,其實就是針對上述提出的三個問題的解法。
除此之外,還有乙個重要的內容:
最小二乘應該說是一種思想,而只有結合了具體物件,才變成最小二乘法。這也就導致了多種多樣的最小二乘公式、推導、證明等等。但是,其核心是最小二乘的思想,只是展示形式不同。那麼,這個不同在**呢?
用一句話來說:基底不同。那麼什麼又是基底呢?
上式中的x1,x2,.....,xn就是基底。對於曲線擬合而言(見後面應用部分),x1=1,x2=x,x3=x^2.....。對於其他應用而言,x的含義又有所不同。看到這裡,可能大家有乙個疑問:都說最小二乘求解的是線性問題,為什麼曲線擬合方程中出現冪次方這個非線性的環節了呢?
這就又涉及到了乙個重要概念,那就是:所謂線性方程,是有針對的物件的,也就是有所指的。就像乙個座標點(x,y),其含義是針對x座標軸和y座標軸而言的。那麼這裡,對於曲線擬合過程。雖然方程針對x是非線性的,但是針對各個引數θ而言,這個方程就是線性的了。那麼,如果所求是x,那麼就無法用最小二乘法。換句話說,如果針對所求引數,方程是線性的,那麼就可以使用最小二乘法求解。
先說誤差方程,就是用目標函式減去擬合函式,再取其平方即可。這裡又涉及到乙個問題,為什麼要取平方和?如果不取平方和,取誤差的絕對值之和,會有什麼效果呢?可以從幾個方面理解這個問題,先從幾何的角度看這個問題。假設有一條直線y=ax+b,要在這條直線上找到一點,距離(x0,y0)這個點的距離最短。如果用絕對值的方法尋找,也就是取min(|y-y0|+|x-x0|),由於絕對值最小為0,所以最小的情況就是x=x0或者y=y0處,如下圖1所示。
如果用平方和的方法尋找,就是取 ,可以看出該式是兩點間距離公式,也就是距離的概念。那麼最短的距離,就是點到直線的垂線,如下圖2所示。
注:忽略縱軸與橫軸的比值,在此只是示意圖。
因此,相比於絕對值的方法,平方和的方法可以得到更短的距離,使得擬合函式更接近於目標函式。其實上述例子,就是從範數的角度考慮這個問題,絕對值對應的是1範數,最小二乘對應的就是2範數。此外,據說還可以從極大似然法中推導出平方和的公式,有興趣的可以深入**一下,我再次就不再贅述(其實我也沒研究過。。哈哈。。)
從高中我們就學過如何取極值,只不過不同於此的是,求取物件是乙個一元二次方程。而最小二乘的誤差函式形式多樣,但其解決方法與求一元二次方程極值的方法相同。無非就是將原來對變數
求導,變成了對向量
求偏導(就是在向量某乙個維度上的導數)。如果不是對向量求導,而是對函式
求導,就是復變函式的變分法(可見都是換湯不換藥,思想不變,重要的區別是求導物件不同)。求導之後,就是另求導的式子為0,解出極值點。再判斷該極值點是極大值點還是極小值點,這樣就得到了使誤差函式最小化的向量值。到此,就完成了最小二乘法,是不是很簡單呢。
如果只考慮應用,這部分的內容就不需要了解了。因為最小二乘的統計特性是**,最小二乘結果可靠的原因,需要用到隨機過程這個工具,推導出最小二乘適用的原理。為了不讓大家迷惑,以後單獨**這個問題。
已有n組的資料,利用函式y=f(x;theta)去擬合資料,求當theta為何值時,擬合的效果最佳。
注:由於最小二乘法的應用場景多種多樣,所以很多推導公式都是基於特定應用物件的。如遇到曲線擬合的問題,各引數基底是x的冪次方。在推導的過程中,就會出現範德蒙德矩陣,經常讓人一臉懵逼。為了更簡便的學習最小二乘推理過程,建議大家採用本文中的全部用符號替代所有引數基地,這樣反而使得推導過程更加清晰。
針對誤差和求偏導,有如下方程:
再結合 ,將上式每一行展開,再縱向求和,代入化簡(化簡過程比較繁瑣,不過自己推導一遍會加深理解,有興趣的可以自己推導一下,竟然可以將上式化簡為非常簡單的形式,很神奇)後可以得到如下方程:
注:下面公式(2)應為公式(1)
從以上計算可以看出,矩陣形式跟方程形式的最小二乘法是等價的,只不過是書寫形式不同。如果直接從矩陣形式推導,可以更簡便的得到結果(6)。特別注意,不可以直接用如下方法:
貌似這樣得到的結果與我們計算得到的一樣,但是其實是錯誤的。因為第一步y=xa就是錯誤的,只有當誤差項為0的時候,才可以這麼寫,否則的話存在誤差項。
如果將最小二乘法中向量的維數設定為2,即(xi,1),擬合函式為y=ax+b,引數theta為2維,化簡後的公式就是我們在書本上常見的直線擬合公式。
如果將最小二乘法中x,設定為如下形式:
最小二乘法就變成了曲線擬合公式。
機器學習中的線性回歸演算法,就是上面舉例使用的公式。其中,線性代表的是擬合函式的形式,回歸也可以稱為擬合。這種方法經常在如下情況使用,當xtx的逆無法求得的,也就無法用矩陣形式得到最小二乘的解。那麼,就可以利用梯度下降的方法逐步的逼近出最優解。梯度下降可以算作解最小二乘的方法,跟矩陣解法、方程解法並列。具體區別可以參看知乎上對該問題的解釋:
就是將擬合函式用傳遞函式的時域表示式寫出,通過輸入輸出資料,最終計算得到時域表示式中的各項引數,就實現了系統辨識。
什麼是最小二乘法?
答 最小二乘法的乙個最簡單的例子便是算術平均。最小二乘法 又稱最小平方法 是一種數學優化技術。它通過最小化誤差的平方和尋找資料的最佳函式匹配 利用最小二乘法可以簡便地求得未知的資料,並使得這些求得的資料與實際資料之間誤差的平方和為最小。用函式表示為 使誤差平方和達到最小以尋求估計值的方法,就叫做最小...
最小二乘法
include stdafx.h include include const int n 2 const int m 5 int sgn double x void lss double g n 1 int xm,int xn,double x m double p,double w m lss函式...
最小二乘法
在研究兩個變數之間的關係時,可以用回歸分析的方法進行分析。當確定了描述兩個變數之間的回歸模型後,就可以使用最小二乘法估計模型中的引數,進而建立經驗方程.簡單地說,最小二乘的思想就是要使得觀測點和估計點的距離的平方和達到最小.這裡的 二乘 指的是用平方來度量觀測點與估計點的遠近 在古漢語中 平方 稱為...