最小二乘法主要用於解決函數模型最優解問題,是測量工作及其他科學工程領域中,應用最早也是最廣泛的算法。

在生產實踐中,經常會遇到利用一組觀測數據來估計某些未知參數的問題。

舉個栗子,

一個做勻速運動的質點在時刻t的位置是y,則可以用如下的線性函數來描述:

y=at+b

其中,a是平均速度,b為質點在t=0時刻的初始位置,求參數a和b。

理想情況下,隻需要在兩個不同時刻 t1 和 t2觀測出質點的相應位置y1 和 y2,建立兩個方程,即可解出兩個未知數。這也是我們高中以前常做的、有唯一確定解的問題。

但是,實際觀測時,觀測值中是帶有觀測誤差(偶然誤差、系統誤差和粗差)的。

觀測誤差產生的原因有很多,概括起來有三個方面:

1. 測量儀器

每種儀器隻具有一定限度的準確度,比如我們常用的塑料尺,因為隻能讀到毫米位,毫米以下需要估讀,另外,塑料尺因為制造工藝限制,很難保證刻度準確無誤,由此觀測所得的數據必然帶有誤差。

2. 觀測者

每個人的感官及技術水平、工作態度會有一定差異,所以觀測的結果也會有一些差異。

3. 外界條件

測量時所處的外界條件,比如溫度、濕度、風力等,都會對觀測值直接產生影響。

如果還是像理想情況一樣,觀測兩次,解方程,由於存在誤差,得到的結果可能會有很大偏差。

所以,在實際觀測時,考慮到觀測值帶有偶然誤差,總是作多餘觀測。

在這種情況下,為瞭求得a和b,就需要在不同時刻(t1, t2,……tn)來測定其位置,得出一組觀測值(y1, y2, ……yn)。這時,由式 y=at+b 可以得到:

ti、yi為第 i 次觀測值, vi即第 i 次觀測時的觀測誤差。

從圖中可以看出,由於存在觀測誤差,由觀測數據繪出的點——觀測點,描繪不成直線,而有一些“波動”。若將這些觀測數據代入方程求解,a和b之值無確定解。

這裡就產生這樣一個問題:用什麼準則來對參數a和b進行估計,從而使估計直線 y=at+b“最佳”地擬合於各觀測點?

這裡的“最佳”一詞可以有不同的理解。例如,可以認為:各觀測點對直線最大距離取最小值時,直線是“最佳”的;也可以認為,各觀測點到直線的偏差的絕對值之和取最小值時,直線是“最佳”的,等等。在不同的“最佳”要求下,可以求得相應問題中參數a和b不同的估值。

但是,在解這類問題時,一般應用的是最小二乘原理。

最小二乘法最早出現在勒讓德1805年發表的論著《計算彗星軌道的新方法》附錄中。在此之前,前人多設法構造k個方程去求解,而勒讓德沒有因襲前人思想。他認為:“賦予誤差的平方和為極小,則意味著在這些誤差間建立瞭一種均衡性,它阻止瞭極端情形所施加的過分影響。這非常好地適用於揭示最接近真實情形的系統狀態。”

該附錄占據瞭這本80頁小冊子的最後9頁,在前面關於衛星軌道計算的討論中沒有涉及最小二乘法,可以推測他當時感到這一方法尚不成熟。

到此為止,這個方法仍有其不足之處,即它純是一個計算方法,缺少誤差分析。我們不知道,使用這個方法引起的誤差如何,因此也就無法知道,除瞭若幹表面上的優點(例如計算上方便)之外,最小二乘法還有何深層次的優點。要研究這些問題,就需建立一種誤差分析理論。

1809年,高斯發表論著《天體運動理論》。在該書末尾,他寫瞭一節有關“數據結合”的問題,以極其簡單的手法導出誤差分佈——正態分佈(描述偶然誤差通常用正態分佈,其特性:在一定觀測條件下,誤差的絕對值有一定的限制,或者說,超出一定限制的誤差,其出現的概率為零;絕對值較小的誤差比絕對值較大的誤差出現的概率大;絕對值相等的正負誤差出現的概率相同;偶然誤差的數學期望為零),並用最小二乘法加以驗證。

高斯較之於勒讓德把最小二乘法推進得更遠,他由誤差函數推導出這個方法並詳盡闡述瞭最小二乘法的理論依據。可以說,沒有高斯的正態誤差理論配合,最小二乘法的意義和重要性可能還不到其現今所具有的十分之一。最小二乘方法與高斯誤差理論的結合,是數理統計史上最重大的成就之一,其影響直到今日也尚未過時。

關於最小二乘法,高斯宣稱自1795年以來他一直使用這個原理。這立刻引起瞭勒讓德的強烈反擊,他提醒說科學發現的優先權隻能以出版物確定, 並嚴斥高斯剽竊瞭他人的發明他們間的爭執延續瞭多年。因而,這兩位數學傢之間關於優先權的爭論,在數學史上的知名度僅次於牛頓和萊佈尼茲之間關於微積分發明權的爭論。現在一般認為,二人各自獨立地發明瞭最小二乘法,盡管早在10年前,高斯就使用這個原理,但第一個用文字形式發表的是勒讓德。

勒讓德和高斯發現最小二乘法是從不同的角度入手的:一個是為解線性方程組,一個是尋找誤差函數;一個用的是整體思維,考慮方程組的均衡性,一個用的是逆向思維,首先接受經驗事實;一個是純代數方法,一個致力於應用。

再回到開頭的問題。

按照最小二乘原理的要求,認為“最佳”地擬合於各觀測點的估計曲線,應使各觀測點到該曲線的偏差的平方和達到最小。

就是要在滿足下式的條件下解出參數的估值a和b。

也即測量平差中:

最後,我們用Matlab來實現開頭的例子。

clear all
% 生成離散點
t = [0 1 2 3 4 5 6 7 8 9];
y = [0 2 4 7 8 9 12 14 15 18];
% 構造參數矩陣
A = ones(10,2);
A(:,2) = t';
% 參數初值
a = 0; %平均速度
b = 0; %初始位置
% 誤差值
l = y - (b + a*t);
% 解算參數
for i = 1:10
dX = inv(A'*A)*A'*l';
b = b + dX(1);
a = a + dX(2);
l = y - (b + a*t);

end
% 成圖,紅色‘+’為生成的離散點,黑色直線為最小二乘擬合直線
plot(t,y,'r+',t,b+a*t,'k')