「05」迴歸的誘惑:一文讀懂線性迴歸

前言

從這一篇文章開始,就正式進入「美團」算法工程師帶你入門機器學習系列的正文了,以前的幾篇算是導讀和預熱,想必你們看的並不過癮。從這裏開始,咱們將會以線性迴歸爲起點,貫通迴歸方法在機器學習算法中所扮演的角色、具備的功能和使用的方法。算法

提及迴歸,它是咱們在高中時就接觸過的內容。具體的,迴歸(Regression)是指研究一組隨機變量(Y1 ,Y2 ,…,Yi)和另外一組隨機變量(X1,X2,…,Xk)之間關係的統計分析方法,又稱多重回歸分析。一般Y1,Y2,…,Yi是因變量,X一、X2,…,Xk是自變量。因變量,就是指被影響、決定的變量,自己不參與運算,而自變量則是指自身發生變化、改變並參與運算,最終影響因變量的變量。這些內容都是高中學習過的基礎,這裏僅僅作個回顧,不深刻複習。app

如今,讓咱們先拋開機器學習、算法、模型這類名詞,從最簡單的線性迴歸來看看,到底什麼是迴歸(的誘惑)機器學習

 

 

線性迴歸是什麼?

咱們前面提到過,迴歸是計算因變量和自變量之間統計關係的一種方法。而線性迴歸能夠理解爲學習變量之間線性關係的方法。做爲一切迴歸的基礎,它已經存在了時間長了,是無數教科書的主題。ide

雖然看起來,線性迴歸與一些更現代的統計學習方法,好比支持向量機相比,有些過於簡單。但在咱們後續章節介紹的方法中,線性迴歸還是一種很是有用的統計學習方法,它能夠被用來簡單的測試數據和分析數據。 基於這個出發點,許多有趣的機器學習方法能夠被看做是概線性迴歸的擴展。在談及具體的迴歸方法以前,讓咱們先來看看線性迴歸爲何叫回歸。函數

 

在19世紀的英國,有一位著名的生物學家高爾頓,在研究父母和孩子身高的遺傳關係時,發現了一個直線方程,經過這個方程,他幾乎準確地擬合了被調查父母的平均身高 x 和 子女平均身高 y 以前的關係:學習

這在當時但是一件不得了的事情,那這個方程是什麼意思呢?它表明父母身高每增長1個單位, 其成年子女的平均身高只增長0.516個單位,反映了一種「衰退」效應(「迴歸」到正常人平均身高)。雖然以後的x與 y變量之間並不老是具備「衰退」(迴歸)關係,可是爲了記念高爾頓這位偉大的統計學家,「線性迴歸」這一名稱就保留了下來。測試

 

一元線性迴歸

迴歸最簡單的情形是一元線性迴歸,也即由彼此間存在線性關係的一個自變量和一個因變量組成,方程寫做Y=a+bX+ε(X是自變量,Y是因變量,ε是隨機偏差)咱們先來看一個例子:優化

假設有以下數據點,橫軸表明一個產品的廣告費X,縱軸表明產品的銷售額Y。迴歸能夠看作是用Y=a+bX+ε這條直線去擬合這些數據點,也就是儘可能使這些數據點與直線的距離之和(也叫做平方偏差和)最小。idea

經過最小二乘法或梯度降低(後面會講這兩個方法),咱們獲得以下方程:spa

那麼,當一個新的廣告計劃出現,咱們經過已知的X(廣告投入)代入方程,就能夠儘量準確的算出預期的產品銷售額了~固然,反過來,使用一個預期的產品銷售額,也能夠反推出咱們須要投入的廣告費用。

 

多元線性迴歸

當自變量大於1的時候,好比X=(x1, x2),咱們稱它爲多元線性迴歸,寫做

其中,y(x)也就是咱們說的因變量,x爲自變量,可是0次項和1次項的係數(a, b)被一個向量w所代替。這裏的w是一個簡單的矩陣線性乘法問題,對應瞭如下的向量

若是對於線性代數問題還有不理解的小夥伴,能夠自行查閱《線性代數同濟版》

來看一個例子:給定⼀個有關房屋的數據集,其中每棟房屋的相關數據包括⾯積(平⽅⽶)、房齡(年)和價格(元)。假設咱們想使⽤任意⼀棟房屋的⾯積(設x1)和房齡(設x2)來估算它的真實價格(設y)。那麼x1 和x2 即每棟房屋的特徵(feature),y 爲標籤(label)或真實值(ground truth)。在線性迴歸模型中,房屋估計價格(設​)的表達式爲

其中w1,w2 是權重(weight),一般用向量

來表示,b 是誤差(bias),也就是前面一元迴歸裏咱們用到的b。這⾥的權重和誤差都叫作線性迴歸模型的參數(parameter)

 

 

線性迴歸的假設

線性迴歸做爲被嚴謹證實過的數學方法,有7個必備的假設前提。理論上,必須知足這7個嚴格的假設,咱們才能確保線性迴歸學習到的公式/方程是統計意義成立的。但在實際使用時,咱們只須要知足前3個最重要的假設便可(其餘的通常都默認成立)。之後在學習其餘算法前,咱們也須要了解相似的假設。

關於線性迴歸,最主要的3條假設以下

  • 隨機偏差的均值爲0
  • 隨機偏差的方差爲σ^2
  • σ^2與X的值無關

這裏規定的σ^2並非一個具體數值,只須要大於0便可。主要是爲了說明隨機偏差的方差是存在的,方差(二階中心矩)不存在,好比無限大,則這個模型就是病態的,這裏涉及到高等代數,感興趣的同窗能夠自行深刻。

 

若進一步假定隨機偏差聽從正態分佈,就叫作正態線性模型。如有k個自變量和1個因變量,則因變量的值分爲兩部分:一部分由自變量影響,即表示爲它的函數,函數形式已知且含有未知參數;另外一部分由其餘的未考慮因素和隨機性影響,即隨機偏差。

通常來講,隨機偏差在參數學習中起到的做用有限,但咱們在真正使用模型時仍是須要先看看數據是否知足線性迴歸的前提,不然容易對模型參數產生擬合問題。

 

線性迴歸的本質

通常來講,迴歸分析是經過規定因變量和自變量來肯定變量之間的因果關係,創建迴歸模型,並根據實測數據來求解模型的各個參數,而後評價迴歸模型是否可以很好的擬合實測數據,若是可以很好的擬合,則能夠根據自變量做進一步預測,好比咱們提到的廣告費用與產品銷售額的關係。

當函數爲參數未知的線性函數時,稱爲線性迴歸分析模型;當函數爲參數未知的非線性函數時,稱爲非線性迴歸分析模型。當自變量個數大於1時稱爲多元迴歸,當因變量個數大於1時稱爲多元迴歸

當X和Y只有一個維度(一元迴歸),且因變量和自變量的關係是線性關係,線性圖表示就是一條直線,而多維度(多元迴歸)學習到的參數方程,體現到空間中就是一個超平面。

 

要注意的是,咱們平時可能會把擬合與迴歸弄混淆,但其實兩者有本質區別。你能夠把現實世界的數據看作「表象」,把你擬合出來的那個模型看作「本質」。由表象到本質的過程就是「迴歸」。而擬合是一種獲得函數的手段,常和數值領域的「插值」放在一塊兒,也就是獲得迴歸函數的手段。

當迴歸函數未知時,咱們能夠經過擬合這種手段算出迴歸函數,求這個迴歸函數的問題叫作迴歸問題。一個是問題的類別,一個是解決方法的類別,迴歸和擬合的差異就在這裏。

數學理論的世界是精確的,譬如在廣告-銷量方程中,你代入x=0就能獲得惟一的 y=7.1884,但這個y並非咱們真實觀測到的,而是估計值。現實世界中的數據就像散點圖,咱們只能儘量地在雜亂中尋找規律,很難100%的完美擬合一條直線出來。用數學的模型去擬合現實的數據,這就是統計。統計不像數學那麼精確,統計的世界不是非黑即白的,它有「灰色地帶」,可是統計會將理論與實際間的差異表示出來,也就是「偏差」。

咱們在前面學習到的公式,就是線性迴歸做爲一種學習算法的本質,即模型

經過求解參數w,咱們知道了自變量和因變量之間的線性關係,即咱們擬合的直線

這個直線就是咱們學習到的模型,儘量地學習到一個完美的W,這就是線性迴歸的本質和做用,也是一切機器學習學習算法的本質——函數(參數)學習。

 

 

線性迴歸的參數學習

如今咱們來看一看如何學習到這個完美的W。線性迴歸的目標能夠理解爲減小殘差平方和,回到整體均值。在探究線性迴歸的學習方法以前,咱們先定義以下表示,方便後續解釋:

 ​表示輸入變量(自變量),第一部分例子中的X。

 ​表示輸出變量(因變量),第一部分例子中的Y。

一對​表示一組訓練樣本。

m個訓練樣本​稱爲訓練集。

 

回到上面一元迴歸的例子來,既然是用直線擬合散點,爲何最終獲得的直線是y = 0.0512x + 7.1884,而不是下圖中的橙色的y = 0.0624x + 5呢?畢竟這兩條線看起來均可以擬合這些數據。

咱們很容發現,數據不是真的落在一條直線上,而是分佈在直線周圍,因此咱們要找到一個評判標準,用於評價哪條直線纔是最「合適」的。這就是咱們之後時常會見到的東西——損失函數

 

在這裏,咱們使用的損失函數叫作殘差,也就是真實值和預測值間的差值(也能夠理解爲距離),用公式表示是:

對於某個廣告投入​ ,咱們有對應的實際銷售量​和預測出來的銷售量​(經過將​代入直線公式計算獲得),計算 ​ 的值,再將其平方(爲了消除負號),將全部的 ​相加,就能量化出擬合的直線和實際之間的偏差。

這裏使用的均方偏差有很是好的幾何意義,它對應了經常使用的歐幾里得距離或簡稱"歐氏距離" (Euclidean distance),也就是圖裏的數據點和直線之間的距離。基於均方偏差最小化來進行模型求解的方法,稱爲「最小二乘法」 (least square method)。在線性迴歸中,最小二乘法就是試圖找到一條直線,使全部樣本到直線上的歐氏距離之和最小。

 

最小二乘法

求解方程參數,使

最小化的過程,稱爲線性迴歸模型的最小二乘"參數估計" (parameter estimation)。咱們可將E(w,b)分別對W 和b求導,獲得

咱們令上面兩個式子的導數爲零可獲得W和b最優解的閉式(closed-form) 解(也就是能夠直接經過公式代入算出來的解)

其中​,爲X的均值

 

當X和Y爲多元迴歸時,咱們也有多元狀況下的最小二乘法,寫做

一樣地,另這個偏導數爲0,咱們能夠獲得

這個東西也叫做正規方程,由於它很正規 (。≖ˇェˇ≖。)。具體的推導和運算涉及到矩陣的逆/僞逆,比單變量情形要複雜,這裏不深刻展開,感興趣的同窗能夠自行翻閱《矩陣論》。這裏咱們只須要知道兩點:

1. 現實任務中XTX 每每不是滿秩矩陣.例如在許多任務中咱們會遇到大量的變量,其數目甚至超過樣例數,致使X 的列數多於行數,XTX 顯然不滿秩。此時可獲得出無限個解, 它們都能使均方偏差最小化

2. 咱們的輸入數據X(自變量),能夠寫做矩陣形式,矩陣的橫軸表明每一個數據的維度(好比房屋的價格,位置,年齡),縱軸表明每一個房屋

學過線性代數的同窗應該知道,當行、列不少時, 這個矩陣的任何運算都須要很大的計算量。尤爲是輸入變量的維度較大時(橫軸的n比較大),該算法的計算複雜度成指數級增長。

所以,正規方程的解法在真實場景中不多見,咱們有另外一種叫作梯度降低的方法,經過損失必定精度,來近似逼近這個最優解。對於梯度方法,這裏只作一個簡單介紹,以後會有專門的一期文章來聊聊機器學習中的優化方法。

 

梯度降低

這裏引用優化教材中的一張圖,這裏咱們把參數W寫做​,二者實際上是一種東西。如今咱們來思考:既然代價函數是關於​的函數,有沒有辦法把求解過程加速或者拆解呢?

答案是有。

上圖中的藍色區域能夠理解爲偏差函數最小的點,也就是咱們要找的參數值,所以,找到該點對應的​,即完成了任務。如何找到最低點位置對應的參數呢?答案是對代價函數(也就是咱們的偏差)求偏導數

咱們用大學學過的微積分方法作一個拆解,能夠獲得:

這就是關於變量的偏導數。要注意的是,這裏的h其實就是咱們的y

假設咱們的函數只有兩個維度(二元迴歸),給定

就是咱們要求的參數,偏差函數對第一個元求偏導的結果:

偏差函數對第二個元求偏導的結果:

求得的結果怎麼使用?咱們對 ​ 求偏導數的意義是獲得這一點上的切線的斜率,它將給咱們一個向最小值移動的方向。所以,​減去偏導數,就等於​向最小值的方向移動了一步。這一步的大小由一個參數決定,也稱做學習率。用公式表達以下:

這就是機器學習中大名鼎鼎的的梯度降低。這個公式爲何這麼寫,有什麼意義,以後在優化方法的文章中會寫。對底層原理感興趣的話,你們能夠之前去看看MIT的微積分公開課(可汗學院、網易都有),以及Boyd所寫的《凸優化》,到時候看博客就會很是通透。

這裏舉一個我在知乎上看到的例子,很是具體的解釋了線性迴歸求解的過程

  1. 初始化一個模型,例如 h = 2 + 3x,也就是說,咱們的初始參數是 
  2. 給定一個樣本對,例如(2,4),代入模型中求得預測值,即 h = 2 + 3*2 = 8
  3. 代入代價函數公式中,求代價值,即 J = 1/2 * (8-4) ^ 2 = 8
  4. 代入偏導數公式中求兩個變量的偏導數,即 

假設咱們的學習率是0.1,那麼代入梯度降低公式獲得 

咱們獲得了新的參數,即 

因此新的模型是:h = 1.6 + 2.2x,新的預測值是h = 1.6 + 2.2*2 = 6,再次計算代價函數的值:J = 1/2 * (6-4) ^ 2 = 2

比較新的模型獲得的代價值2,比老模型獲得的代價值8減小了6,代價越小說明咱們的模型與訓練集匹配的越好,因此經過不斷的梯度降低,咱們能夠獲得最適合訓練數據的模型h,也就是前面提到的那條直線方程。

 

線性迴歸的侷限

線性迴歸簡單、直觀、迅速,但也有很多侷限,這也是以後更多高級算法的出現緣由,它們必定程度上解決了線性迴歸沒法解決的問題。線性迴歸的侷限能夠概括如下幾點:

  • 須要嚴格的假設。
  • 只能用於變量間存在簡單線性關係的數據。
  • 當數據量、數據維度大時,計算量會指數級增長。
  • 需處理異常值,對異常值很敏感,對輸入數據差別也很敏感。
  • 線性迴歸存在共線性,自相關,異方差等問題。

 

結語

到這裏,線性迴歸的文章就告一段落了。在這一篇文章中,咱們經過線性迴歸,簡單瞭解了機器學習的方式、概念和方法,可是對於更加具體的定義,好比模型、損失函數和監督學習還沒講到,這將是我以後文章的主題。下一期文章,咱們將基於線性迴歸,來深刻探討回歸的更多使用方法。

線性迴歸的Python代碼和案例實戰在這一篇:「06」迴歸的誘惑:一文讀懂線性迴歸(Python實戰篇) ,代碼很少,建議你們能夠本身敲一敲。

PS. 若是你們閱讀其中的數學部分有些吃力的話,能夠到個人這篇文章中找對應的知識點複習:「04」機器學習、深度學習須要哪些數學知識?

 

 

課後習題

給定每個月電話諮詢次數(X)和每個月實際銷量,線性迴歸是否能夠把圖中的數據點分爲不一樣的兩個部分?若是能夠,應該怎麼分?若是不能夠,又是爲何?

參考文獻

  1. 《機器學習》周志華
  2. 《動手學深度學習》MXNet Community
  3.  An Introduction toStatistical Learning with Applications in R
  4.  知乎:機器學習之線性迴歸
  5.  知乎:線性迴歸詳解
相關文章
相關標籤/搜索