線性迴歸及其求解方法:梯度下降、最小二乘、正規方程
引言
我們以吳恩達教授常說的房價預測的例子做引入,已知房價可能的影響因素有房屋大小(size)、臥室數量(number of bedrooms)、樓層數(number of floors)、房齡(age of home)等等。其中房屋大小、臥室數量、樓層數、房齡等影響房價的變量稱爲自變量/特徵/屬性/預測變量,而房價稱爲因變量/標籤/目標變量。
線性迴歸就是要建立迴歸方程模擬自變量和因變量之間的相關關係。
一元線性迴歸
假設我們只考慮房屋大小(size)對房價的影響。得到如下圖的樣本點分佈:
由上述可知,一元線性迴歸就是要建立迴歸方程模擬兩個變量之間的相關關係(一個自變量一個因變量)。因爲只有兩個變量,我們需要引入一條直線,來擬合我們已有的樣本點。我們的迴歸方程常寫成如下形式:
我們需要找到一條迴歸直線來擬合已有樣本點,而對於直線,確定斜率和截距即可得到直線方程即迴歸方程。
此時,我們要建立迴歸方程就等價於尋找回歸直線,又等價於求解直線的斜率和截距。
損失函數
在求解迴歸係數時,必須要引入損失函數的概念。
如下圖,紅色點爲樣本點,藍色爲擬合的迴歸直線。我們在尋找回歸直線的時候,很自然會想到最好的迴歸直線應該是能夠儘可能多的穿過所有的樣本點。(因爲此時擬合的損失最小,擬合的直線更加準確)但是,對於點分佈比較雜亂的情況(下圖)幾乎不可能實現,無論怎樣擬合損失都達不到0,此時我們的辦法是,使迴歸直線和樣本點的(平均)殘差平方和最小。
這樣就得到了損失函數:
其中分母的可以省略,爲了後續求導方便,求得平均損失。
損失函數可視化
一元線性迴歸損失函數:
eg.假設,此時損失函數簡化到二維平面,若有三個樣本點爲(1,1),(2,2),(3,3),下面分別根據不同的迴歸直線計算其損失。
此時,,迴歸直線完全擬合樣本點,損失爲0.
,帶入損失函數公式,迴歸直線擬合的損失爲0.533。
,迴歸直線擬合的損失約爲2.33。
帶入不同的係數的值可以得到不同損失值,作圖可得:
綜上,可得去除截距項的一元線性迴歸的損失函數爲一條拋物線。
而完整不經過簡化的一元線性迴歸損失函數爲下圖凸曲面:
而我們常見的等高線圖就是其凸曲面(三維圖)的二維表示。
等高線圖上的一個點對應一元線性迴歸的一條擬合的迴歸線(每個點橫縱座標爲迴歸係數值,即可確定一條直線)。我們的目的就是尋找使損失函數(凸曲面)達到最低點的迴歸係數的值。
求解一元線性迴歸
方法一、最小二乘法
最小二乘法(又稱最小平方法)是一種數學優化技術。它通過最小化誤差的平方和尋找數據的最佳函數匹配。利用最小二乘法可以簡便地求得未知的數據,並使得這些求得的數據與實際數據之間誤差的平方和爲最小。
最小二乘法想必大家都不陌生,它的求解思路就是:求偏導,令偏導爲0從而求得全局最優解。
解得:
方法二、梯度下降法
梯度:函數在某一點的方向導數(某一點沿各個方向的偏導)沿某個方向達到最大值,此時所沿的方向爲梯度方向。也就是說,沿梯度方向函數值增加最快。
梯度下降法基於“貪心策略”,簡單來說就是走一步看一步。
比如說,一個人在山林中,周圍有兩座小山,其餘大概是平原和窪地。我們的目標是找到最快下山的方向。我們需要注意的是我們可見範圍有限,並不能瞭解整個地勢情況(這個人不知道有兩座小山,多少窪地)他如何在一定的可見範圍內,最快下山。
這個問題就是梯度下降的典型事例。
對於梯度下降,我們首先要了解幾個概念:
1. (梯度下降的)目標:選擇和使最小。
2. 梯度:在所有方向導數中斜率最大的方向導數。
3. 梯度下降:沿着梯度負方向走(走一步調整一步和)
4. 步長(學習率):越小-時間越久;越長-無法收斂到最小
如下圖,若損失函數值隨迭代次數起起伏伏,說明α值較大,無法收斂到全局最小,來回震盪。
如下圖,若損失函數值隨着迭代次數增大,說明α值過大,無法收斂到全局最小值向上震盪。
求解過程:
梯度下降法求解線性迴歸就通過不斷沿損失函數降低最快的方向(梯度的負方向)做權值(係數)更新得到最優的係數。
PS.爲什麼某點的梯度是該函數在這一點的偏導?詳見博文:
https://blog.csdn.net/weixin_42398658/article/details/83017995
求解步驟總結:
- 設置初始值(斜率、截距、學習率、迭代次數)
- 定義損失函數
- 根據梯度下降公式動態調整斜率和截距(權值更新),return出最終的係數。
PS.代碼傳送連接:https://mp.csdn.net/postedit/100619535
求解多元線性迴歸
瞭解了一元線性迴歸後,很容易延伸到多元情況,多元線性迴歸就是建立迴歸方程模擬多個變量之間的相關關係。
其實我們可以想象出:
一元線性迴歸可以擬合出-一條直線
二元線性迴歸可以擬合出-一個平面
多元線性迴歸可以擬合出-一個超平面
例:還是用一開始的房價的例子。假設房價影響因素有房屋大小(size)、臥室數量(number of bedrooms)、樓層數(number of floors)、房齡(age of home)四個。可以得到迴歸方程爲:爲了轉換爲矩陣形式,方便計算:,將乘上,令即矩陣增加了一列全爲1的向量。大致情況見下表:
方法一、梯度下降法
方法二、正規方程法
將上表整理爲矩陣得:(即爲係數)
矩陣微分知識請參考博客:https://blog.csdn.net/daaikuaichuan/article/details/80620518
在下一篇博客,我們一起看一看正規方程的侷限性,對於有侷限的情況應該如何處理,怎樣進行模型改進。
寫在最後
這是自己在CSDN上寫的第一篇博客,歡迎各位大佬批評指正~
希望自己能夠堅持下去!加油!(╹▽╹)