最小二乘法(1)——線性問題

2021-01-14 我是8位的

  遠處有一座大樓,小明想要測量大樓的高度,他想到了一個好辦法:

  小明找到一根長度是y1的木棍插在地上,當他趴在 A點時,木棍的頂端正好遮住樓頂,此時他記錄下自己的觀察點到木棍的距離x1 。之後小明又找到另一個長度是y2的木棍,用同樣的方法再觀察一次,這次記錄的數值是 x2。由於測量時存在誤差,因此 x1/y1≠x2/y2,現在小明可以通過相似三角形可以建立起一個有唯一解的方程組:

  小明的兩次觀測數據是x1=1.061,y1=1.310,x2=1.094,y2=1.350。為了便於使用計算機計算,小明用矩陣表示方程組:

  這相當於把方程組轉換為Ax=b的線性形式,進而求得 x=A-1b:

1 import numpy as np
2 x1, y1 = 1.061, 1.310
3 x2, y2 = 1.094, 1.350
4 A = np.mat(np.array([[-y1, x1], [-y2, x2]]))
5 b = np.mat(np.array([x1 * y1, x2 * y2])).T
6 x = A.I * b
7 print(x)

  結果是 x≈58.77,y≈73.87。

  幾天後,為了在同學面前炫耀,小明又去測量了一次。因為工具粗糙且視角略有差別,這次的數據是x3=1.143,y3=1.410,x4=0.922,y4=1.140 ,得到的結果是x≈94.85,y≈118.41 ,這可與之前的結果相差很大。於是小明繼續測量,算上前幾天的2組數據,小明一共記錄了8組數據:

  這下可壞了,任意兩組數據都能得到唯一解,任意三組數據都無解!怎麼辦呢?

最小二乘法

  常規的方法無法回答小明的問題,幸好高斯老爺子發現了最小二乘法。最小二乘法(又稱最小平方法)是一種通過最小化誤差的平方和,尋找數據最佳函數匹配的優化策略。

微積分視角

  由於測量大樓時存在誤差,所以每次計算結果都是大樓高度的近似值,這就導致8次測量的數據實際上構成了一個大型的約等方程組:

  現在的問題是,約等方程組不能按照直等方程組的方法求解。對此,我們的解決思路是尋找到一組x 和y ,使得方程組中所有方程的左右兩側都盡最大可能相等。在進一步解釋前,先將約等方程組轉換成熟悉的線性形式:

  大樓就在那裡,它的高度是固定不變的。既然每次測量都存在誤差,那麼y的真實值實際上是計算值加誤差:

  我們的目標是尋找一組合適的x 和y ,使得所有方程中的誤差都儘可能小,這相當於讓總體的誤差最小:

  誤差有正有負,將負號去掉的方式有兩種,取誤差的絕對值或取誤差的平方,顯然平方比絕對值更簡單,因此先將各項取平方後再嘗試找出最小值:

  上式就是最小二乘法的公式,其中ai 和 bi是已知的,表示約等方程組中第 個方程的相關係數。如果把 J 展開,就可以直觀地看出它表達的含義:

  最小二乘法作為一種策略,並未指出具體的求解方案。由於極值通常出現在臨界點上,所以一種可行的方案是通過尋找臨界點(也就是 J 的偏導等於0的點)求解。

  這個看上去有點嚇人的求導其實很簡單:

  以展開式的第一項為例:

  展開式的每一項都將得到類似的結果,由此我們將得到一個新的方程組:

  這裡需要抑制住衝動,方程組中的兩個方程都是和式運算,每一項的ai都不同,因此第一個方程的等式兩側不能除以 ai,即不能使用下式:

  現在有兩個方程,兩個未知數,可以求得唯一一組解。

  已經知道了ai和bi ,可以計算出方程組的解:

import numpy as npx = np.array([1.061, 1.094, 1.143, 0.922, 1.110, 1.156, 1.123, 1.020])y = np.array([1.310, 1.350, 1.410, 1.140, 1.370, 1.425, 1.385, 1.260])a = y / xb = yp1 = np.sum(a ** 2)p2 = np.sum(a)p3 = np.sum(a * b)q1 = p2q2 = np.sum(b)A = np.mat(np.array([[p1, -p2], [q1, -np.alen(x)]]))b = np.mat(np.array([-p3, -q2])).Tx = A.I * bprint(x)

線性代數視角

  從微積分的視角來看,最小二乘法相當於求解約等方程組,那麼最小二乘法的線性代數視角又是什麼呢?

  先來看向量的投影:

  b,p,e 是3個向量,其中p是b 在平面上的投影, e是b和p 的誤差向量,e=b-p 。平面可以看作二維向量張成的向量空間,p 在該空間上。將向量投影到向量空間有什麼意義呢?這要從方程 Ax=b 說起。

  小明根據測量結果得到了一個方程組,並將它進一步化簡為矩陣的形式:

  對於小明的數據來說, Ax=b無解,實際上大多數這種類型的方程都無解。A的列空間的含義是方程組有解時b 的取值空間,當b 不在 A的列空間時,方程無解。具體來說,當A 是行數大於列數的長方矩陣時,意味著方程組中的方程數大於未知數的個數,此時肯定無解。

  雖然方程無解,但我們還是希望能夠運算下去,這就需要換個思路——不追求可解,轉而尋找最能接近問題的解。對於無解方程Ax=b 來說,Ax 總是在列空間上(因為列空間本來就是由 Ax確定的,和b 無關),而 b就不一定了,所以需要微調 ,將p 調整至列空間中最接近它的一個,此時Ax=b 變成了:

  p就是 b在 A的列空間上的投影, x上加一個小帽子表示x 的估計值。當然,因為方程無解,所以本來也不可能有 Ax=b。此時問題轉換為尋找最好的估計值 ,使它儘可能滿足原方程:

  在上圖中,A的秩是2,平面表示A的列空間,平面上的向量有無數個,其中最接近b 的當然是b 在平面上的投影,因為只有在這時 b-p 才能產生模最小的誤差向量。

  如何求得估計值呢?

  在小明的測量數據中,A的列空間是一個超平面,A的兩個列向量都在這個超平面上,b和p 的誤差向量e垂直於超平面,因此e也垂直於超平面上的所有向量,這意味著e 和 A的兩個列向量的點積為0。

  將二者歸納為一個矩陣方程:

  矩陣方程已經去掉了關於 的信息,通過該方程可進一步求得估計值:

  這就是最終結果了,它是由矩陣方程推導而來的,所以這個結果叫做「正規方程」。

  還有一種更簡單的方式可以得到正規方程。Ax=b無解的原因是因為 A 是一個長方矩陣,只要在等式兩側同時乘以 AT,就可以把長方矩陣轉換成方陣,進而求解。

import numpy as npx = np.array([1.061, 1.094, 1.143, 0.922, 1.110, 1.156, 1.123, 1.020])y = np.array([1.310, 1.350, 1.410, 1.140, 1.370, 1.425, 1.385, 1.260])a1 = -(y / x)a2 = np.array([1] * 8)A = np.mat(np.array([a1, a2])).Tb = np.mat(y).Tx = (A.T * A).I * A.T * bprint(x)

概率統計的視角

  在實際應用中,我們把 J函數稱為「平方差損失函數」或「平方損失函數」,通過名字自然地聯想到概率統計中方差的概念。作為衡量實際問題的數字特徵,方差有代表了問題的波動性,這裡如何理解「波動性」呢?

  大樓就在哪裡,它的高度是一個真實值,假設這個值是100。接下來為了便於說明,我們把問題簡單化,假設小明只需要一次測量就可以計算出大樓的高度。

  表中計算結果與真實值的差就是每次計算結果與真實值的波動,把每次波動累加起來就是整體的波動,也就是問題的「波動性」。由於每次波動都有正有負,如果直接相加的話會正負抵消,得到波動性是0的結論,這顯然是荒謬的。解決這個問題的一個方法是每次波動都取絕對值,另一個方法是取波動的平方,平方不用考慮符號的問題,因此比絕對值更簡單。

  現在可以計算出小明8次計算的總體波動和平均波動:

  相比較而言,第3次、第5次、第6次計算結果的平均波動較小,看起來似乎應該只取這3次的測量結果。問題是,小明並不知道哪些結果是波動較小的。此外,根據「大樣本理論(large sample theory)」,在大樣本下,只要研究數據的漸進分布即可。簡單地說,只有當測量數據達到一定規模時才能得到較為正確的結果,數據越多會越好。比如桌球比賽偶爾會出現「爆冷」的場景,某個成績平平的外國選手戰勝了中國的頂尖選手,但你並不能因此說這名外國選手的實力更強,只能說在本次比賽中二者的波動都較大,外國選手打出了太多的「超級球」,而中國選手正好不在狀態;當二者的交手逐漸增多時,他們的平均波動也將趨近於各自的真實實力,中國選手自然會找回場子。

  回到原問題,從概率統計的視角來看,最小二乘法的意義是讓所有樣本波動之和最小化:

  如果在平方和基礎上除以測量的次數,則變成了讓樣本的平均波動最小:

最小二乘法與線性回歸

  回歸(Regression)是一類重要的監督學習算法,其目標是通過訓練樣本的學習,得到從樣本特徵到目標值之間的映射。在回歸中,樣本的標籤是連續值。線性回歸(Linear Regression)是回歸問題中的重要一類。在線性回歸中,樣本特徵與目標值之間是線性相關的。

  回歸的重要應用是預測,比如根據人的身高、性別、體重等特徵預測鞋子的尺碼;根據學歷、專業、工作經驗等特徵預測薪資待遇;根據房屋的面積、樓層、戶型等特徵預測房屋的價格。

一元線性回歸

  只有一個特徵的線性回歸問題稱為一元線性回歸,其擬合曲線是一條直線,它的假設函數(hypothesis function)是:

  我們的目標是根據給定的訓練樣本找出合適的模型參數,使假設函數變成明確的模型,從而使得該模型與訓練樣本達到最大的擬合度。

  可以使用最小二乘法作為一元線性回歸的學習策略:

  在機器學習中J稱為損失函數(cost function),這裡m 是訓練樣本的個數,y 表示樣本的標籤,也就是真實結果。乘以1/m 的目的是為了使損失值不至於變得過大,以便更地直觀感受到模型的優劣。最小化損失函數的幾何意義是所有樣本到直線的函數距離最小化:

  這裡 x和y是已知的,而θ1和θ2才是未知的,雖然這裡與小明在測量大樓時的公式有所不同,但是讓整體誤差到達最小的道理是一樣的。推導時需要對θ1和θ2求偏導,當m=1 時:

  在求偏導時出現了係數2,為了約掉這個係數,通常在損失函數中除以2:

  由此得到新的偏導:

  推廣到 m個數據集:

  令每個偏導的值都等於0,便得到了一個二元一次方程組,從而求得具體的模型參數。

多元線性回歸

  我們比較熟悉的概念是二維平面和三維空間,有人說四維包含了時間、五維包含了靈魂……別信他的!空間的每一個維度都可以代表任意事物,這完全取決於你對每一個維度的定義。多維空間只是個概念,不要試圖在平面上通過幾何的方式描述四維以及四維以上的空間。

  實際上多維空間很常見,關係型資料庫的表就可以看作一個多維空間,表的每個欄位代表了空間的一個維度,下面就是一個十維空間的例子。

  可以看到,維度的內容不僅僅包含數量,同樣可以包含文字,只是為了能夠計算,需要制定一些規則將文字轉換成數字。

  在真實的世界中,訓練樣本的特徵可能是成千上萬維,多元線性回歸通過一個超平面來擬合數據。不要試圖畫出超平面,實際上連四維空間都沒法有效地展示。畫不出來沒關係,能表達就好了,n維空間的超平面可以寫成:

  如果用向量表示:

  這就又變成了我們熟悉的直線方程。如果令 x0=1,可以更進一步簡化 :

  在多元線性回歸中,我們依然使用最小二乘法的策略:

  最終將求得:


相關焦點

  • 最小二乘法與線性回歸
    回歸分析按照涉及的變量的多少,分為一元回歸和多元回歸分析;按照自變量和因變量之間的關係類型,可分為線性回歸分析和非線性回歸分析。        線性回歸是一種最為我們熟悉的方式,故接下來我們就來詳細了解線性回歸。1.
  • 線性回歸與最小二乘法
    ,在該模型中,因為只有1個自變量x,所以稱之為一元線性回歸,公式如下其中e表示通過回歸方程計算出的擬合值與實際觀測值的差,通過維基百科上的例子來看下實際的計算過程在scikit-learn中,使用最小二乘法的代碼如下>>> data = np.array([1, 2, 3, 4]).reshape(-1, 1)>>> dataarray([[1],
  • 最小二乘法
    微積分應用課題一 最小二乘法  從前面的學習中, 我們知道最小二乘法可以用來處理一組數據, 可以從一組測定的數據中尋求變量之間的依賴關係, 這種函數關係稱為經驗公式. 本課題將介紹最小二乘法的精確定義及如何尋求 與 之間近似成線性關係時的經驗公式.
  • 什麼是最小二乘法
    今天,測量攻城獅將通過平面度檢測實例,用最簡單、最直接的思路介紹最小二乘法。 一、最小二乘法概念(基本概念還是要介紹一下的)最小二乘法(The leastsquare method),又稱最小平方法,是一個數學的公式,在數學上稱為曲線擬合,這裡所講最小二乘法,專指線性回歸方程。
  • 通透 | 最小二乘法的本質是什麼?
    (忽略這裡的1/2,為了後面微分的方便)。以上就是最小2乘問題的介紹和定義。解決最小二乘問題實際上是求解方程 歐氏空間是平坦的、線性的、各向同性的。(用愛因斯坦的話來說就是空間曲率為0)為什麼最小二乘法好使?因為我們處於空間曲率近似為0的空間,多數的物理量和物理定理都滿足歐氏空間的特性。實際上,高斯對於最小二乘法的認識,很有欽定的意味:假定最小二乘法最優,那麼如何如何。至於為什麼它最優,抱歉,高斯本人也不知道。
  • 手把手教你最小二乘法
    今天這期推送的主題是介紹最小二乘法以及如何利用最小二乘法對已有數據進行擬合。之所以會想到這個主題,是因為前段時間在準備美賽時看到很多最小二乘法的應用,但多數關於其原理的帖子要麼晦澀難懂要麼不夠清楚,就像下面這樣,於是乎萌生出這個想法。        (全文共2479字,我也不知道什麼時候能看完。
  • 最小二乘法詳細介紹
    1.最小二乘的背景wiki百科: 1801
  • 最小二乘法的計算原理
    高斯使用的方法就是最小二乘法,該方法發表於1809年他的著作《天體運動論》中。最小二乘法(又稱最小平方法)是一種數學優化技術。它通過最小化誤差的平方和尋找數據的最佳函數匹配。利用最小二乘法可以簡便地求得未知的數據,並使得這些求得的數據與實際數據之間誤差的平方和為最小。其中,
  • 第48篇 最小二乘法
    1806年,法國科學家勒讓德獨立創立最小二乘法,但因不為世人所知而默默無聞。勒讓德曾與高斯為誰最早創立最小二乘法原理發生爭執。1809年,高斯使用的最小二乘法的方法發表於《天體運動論》中。1829年,高斯提供了最小二乘法的優化效果強於其他方法的證明,因此最小二乘法也被稱為高斯-馬爾可夫定理。
  • Python實現最小二乘法
    上一篇文章講了最小二乘算法的原理。這篇文章通過一個簡單的例子來看如何通過Python實現最小乘法的線性回歸模型的參數估計。王松桂老師《線性統計模型——線性回歸與方差分析》一書中例3.1.3。那麼,我們要怎樣對這組數據進行線性回歸分析呢?一般分三步:(1)畫散點圖,找模型;(2)進行回歸模型的參數估計;(3)檢驗前面分析得到的經驗模型是否合適。畫散點圖創建一個DataTemp的文件夾,在其中分別創建"data"、"demo"文件夾用於存放數據文件、Python程序文件。
  • 最小二乘法的數學公式
    之前在德輝學堂介紹過最小二乘法,但是有很多好學的小夥伴總是追問,最小二乘法的數學公式究竟是怎麼樣的?      本期的這一篇文章,我們將介紹一個簡潔的最小二乘法數學公式,慢慢剖析它,爭取讓好學的小夥伴們能認識它,然後再結合Excel利用它來做一些計算。
  • 最小二乘法的前世今生,及其與平均值的關係
    總結一下,為了找出最能代表5次月考成績的真值y,我們使用了到y值的「距離平方的和」最小的原理。用今天我們熟悉的稱呼叫做「最小二乘法(least square method)」,這裡的二乘就是平方的意思。
  • 高考數學:統計二輪微專題——用最小二乘法求線性回歸方程
    最小二乘法主要用來求解兩個具有線性相關關係的變量的回歸方程,該方法適用於求解與線性回歸方程相關的問題,如求解回歸直線方程,並應用其分析預報變量的取值等.破解此類問題的關鍵點如下:①析數據,分析相關數據,
  • GD&T乾貨|最小二乘法的數學公式詳解
    最小二乘法在很多地方都會用到。比如形狀公差中,如果設計者採用下面的標註:圖1 圖紙標註圖1中的標註,平面度的理想要素就必須採用最小二乘法擬合出來(如果沒有那個G的修飾符號,默認是最大值最小法擬合平面)。還有,很多基準的擬合,也會近似的採用最小二乘法擬合。
  • 線性回歸採用最小二乘作為loss的解釋
    1   線性回歸問題的通俗解釋   小編對於線性回歸的通俗解釋就是,根據已知的一元或多元特徵和特徵對應的結果,挖掘出一組參數分別和特徵值相乘,通過構造的多項式來對未知結果的數據集進行預測的方程叫做線性回歸。
  • 最小二乘法(附MATLAB代碼)
    前幾天有一些小夥伴需要小編講一下最小二乘法,小編依稀記得當年數值計算這門課學習過這個知識點,但無奈小編忘得一乾二淨,於是在知乎上看到這位大神對最小二乘法的講解,各位小夥伴如果想直接看這位大神講解的話,可以點擊下方閱讀原文直接進行學習。
  • 來認識一下傳說中的最小二乘法
    最小二乘法在三坐標測量時常常被提起,那什麼是最小二乘法呢?它具備什麼樣的特點?根據標準,哪些要求必須採用最小二乘法呢?
  • 線上直播 | 偏最小二乘法是個什麼鬼?
    偏最小二乘法剛看到這個名稱學長也是...
  • 最小二乘法之加權最小二乘的應用
    因此我們迫切需要對每個點都定義一個權重,這就是今天我要介紹的加權最小二乘法。在介紹這個算法之前,先回答一個問題,上篇文章中,有網友私信問我為什麼那個參數方程要選取較小的特徵值與特徵向量:這個問題我在上篇文中只是提到了一下,最小距離的總和剛好是數據集矩陣的特徵值,但並沒有說明具體的原因,這裡給出一個更直觀的證明方法:
  • f p 線性回歸專題及常見問題 - CSDN
    線性回歸求解思路在求一個點的預測值時,在該點附近一段區間內,擬合一條直線,從而求得預測值.多元線性回歸的求解方法可以是梯度下降和Normal Equation,以及二階的牛頓法等。最小二乘法可以求出全局最優,但是大規模矩陣的求逆運算複雜度較高,因此在數據量較大時常使用梯度下降算法。牛頓法的收斂速度較快,但同樣求逆運算複雜度較高.