迴歸分析中,只包括一個自變量和一個因變量,且二者的關係可用一條直線近似表示,這種迴歸分析稱爲一元線性迴歸分析;如果迴歸分析中包括兩個或兩個以上的自變量,且因變量和自變量之間是線性關係,則稱爲多元線性迴歸分析。常用的方法有梯度下降法和最小二乘法。
1.梯度下降法(GD)
1.1 原理:
其中,爲學習速率或步長(Learning rate)
1.2 假設函數:
1.3 損失函數:
1.4 分析過程:
1.4.1 批量梯度下降法(BGD)
批量梯度下降法,是梯度下降法最常用的形式,具體做法也就是在更新參數時使用所有m個的樣本來進行更新。更新公式爲:
1.4.2 隨機梯度下降法(SGD)
隨機梯度下降法,其實和批量梯度下降法原理類似,區別在與求梯度時沒有用所有的m個樣本的數據,而是僅僅選取一個樣本 i 來求梯度。更新公式爲:
隨機梯度下降法,和4.1的批量梯度下降法是兩個極端,一個採用所有數據來梯度下降,一個用一個樣本來梯度下降。自然各自的優缺點都非常突出。對於訓練速度來說,隨機梯度下降法由於每次僅僅採用一個樣本來迭代,訓練速度很快,而批量梯度下降法在樣本量很大的時候,訓練速度不能讓人滿意。對於準確度來說,隨機梯度下降法用於僅僅用一個樣本決定梯度方向,導致解很有可能不是最優。
1.4.3 小批量梯度下降法(MBGD)
小批量梯度下降法是批量梯度下降法和隨機梯度下降法的折衷,也就是對於m個樣本,我們採用x個樣子來迭代,1<x<m。一般可以取x=10,當然根據樣本的數據,可以調整這個x的值。更新公式爲:
1.5 算法調優:
在使用梯度下降法時,需要進行調優。哪些地方需要調優呢?
① 算法的步長選擇。在前面的算法描述中,我提到取步長爲1,但是實際上取值取決於數據樣本,可以多取一些值,從大到小,分別運行算法,看看迭代效果,如果損失函數在變小,說明取值有效,否則要增大步長。前面說了。步長太大,會導致迭代過快,甚至有可能錯過最優解。步長太小,迭代速度太慢,很長時間算法都不能結束。所以算法的步長需要多次運行後才能得到一個較爲優的值。對於步長,可以使用下列數據進行測試:
0.001、0.01、0.1、1、10...,或者可以用0.001、0.003、0.01、0.03、0.1、0.3、1...,即可以用3倍或10倍的速度,將其慢慢調整到一個區間,然後再進行微調
② 算法參數的初始值選擇。初始值不同,獲得的最小值也有可能不同,因此梯度下降求得的只是局部最小值;當然如果損失函數是凸函數則一定是最優解。由於有局部最優解的風險,需要多次用不同初始值運行算法,關鍵損失函數的最小值,選擇損失函數最小化的初值。
③ 歸一化。 由於樣本不同特徵的取值範圍不一樣,可能導致迭代很慢,爲了減少特徵取值的影響,可以對特徵數據歸一化,也就是對於每個特徵x,求出它的期望和標準差std(x),然後轉化爲:
這樣特徵的新期望爲0,新方差爲1,迭代速度可以大大加快。
2.最小二乘法(OLS)
矩陣表達式:
令:
,
那麼,
當然,有可能不存在,這種情況是極少數。如果不可逆,則一般考慮下面兩種情況:
(1)移除冗餘特徵。某一些特徵之間存在線性依賴
(2)特徵太多時,刪除一些特徵,比如(m<n),對於小樣本數據使用正則化。
3.梯度下降法和最小二乘法的選擇
梯度下降法 | 最小二乘法 |
缺點:
優點:
|
優點:
缺點:
|
通常情況下,當n<10000時,用最小二乘法。當n>=10000時,考慮用梯度下降法。 一些更復雜的算法下只能選擇梯度下降法 |