線性迴歸之梯度下降法和最小二乘法

迴歸分析中,只包括一個自變量和一個因變量,且二者的關係可用一條直線近似表示,這種迴歸分析稱爲一元線性迴歸分析;如果迴歸分析中包括兩個或兩個以上的自變量,且因變量和自變量之間是線性關係,則稱爲多元線性迴歸分析。常用的方法有梯度下降法和最小二乘法。

1.梯度下降法(GD)

1.1 原理:

        \theta =\theta -\alpha \frac{\partial }{\partial \theta }J\left ( \theta \right )

        其中,\alpha爲學習速率或步長(Learning rate)

1.2 假設函數:

        h_{\theta }\left ( x \right )=\theta _{0}+\theta _{1}x_{1}+...+\theta _{n}x_{n}

1.3 損失函數:

        J\left ( \theta \right )=\frac{1}{2m}\sum_{i=1}^{m}\left ( h_{\theta }\left ( x^{\left ( i \right )} \right )-y^{\left ( i \right )} \right )^{2} 

1.4 分析過程:

        1.4.1 批量梯度下降法(BGD)

               批量梯度下降法,是梯度下降法最常用的形式,具體做法也就是在更新參數時使用所有m個的樣本來進行更新。更新公式爲:

                \theta _{j}:=\theta _{j}-\alpha \frac{1}{m}\sum_{i=1}^{m}\left ( h_{\theta }\left ( x^{\left ( i \right )} \right )-y^{\left ( i \right )} \right )x_{j}^{\left ( i \right )}

        1.4.2 隨機梯度下降法(SGD)

                隨機梯度下降法,其實和批量梯度下降法原理類似,區別在與求梯度時沒有用所有的m個樣本的數據,而是僅僅選取一個樣本 i 來求梯度。更新公式爲:

                \theta _{j}:=\theta _{j}-\alpha \frac{1}{m}\left ( h_{\theta }\left ( x^{\left ( i \right )} \right )-y^{\left ( i \right )} \right )x_{j}^{\left ( i \right )}

                隨機梯度下降法,和4.1的批量梯度下降法是兩個極端,一個採用所有數據來梯度下降,一個用一個樣本來梯度下降。自然各自的優缺點都非常突出。對於訓練速度來說,隨機梯度下降法由於每次僅僅採用一個樣本來迭代,訓練速度很快,而批量梯度下降法在樣本量很大的時候,訓練速度不能讓人滿意。對於準確度來說,隨機梯度下降法用於僅僅用一個樣本決定梯度方向,導致解很有可能不是最優。

        1.4.3 小批量梯度下降法(MBGD)

                 小批量梯度下降法是批量梯度下降法和隨機梯度下降法的折衷,也就是對於m個樣本,我們採用x個樣子來迭代,1<x<m。一般可以取x=10,當然根據樣本的數據,可以調整這個x的值。更新公式爲:

                \theta _{j}:=\theta _{j}-\alpha \frac{1}{m}\sum_{i=t}^{t+x-1}\left ( h_{\theta }\left ( x^{\left ( i \right )} \right )-y^{\left ( i \right )} \right )x_{j}^{\left ( i \right )}

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),然後轉化爲:

            \frac{x-\bar{x}}{std\left ( x \right )}

            這樣特徵的新期望爲0,新方差爲1,迭代速度可以大大加快。

2.最小二乘法(OLS)

矩陣表達式: 

\begin{bmatrix} 1 & x_{1}^{(1)}&x_{2}^{(1)} &... &x_{n}^{(1)} \\ 1 & x_{1}^{(2)}&x_{2}^{(2)} &... &x_{n}^{(2)} \\ 1 & x_{1}^{(3)}&x_{2}^{(3)} &... &x_{n}^{(3)} \\ & ...& & ...&... \\ 1 & x_{1}^{(m)}&x_{2}^{(m)} &... &x_{n}^{(m)} \\ \end{bmatrix}\begin{bmatrix} \theta _{0}\\ \theta _{1}\\ \theta _{2}\\ ...\\ \theta _{n}\\ \end{bmatrix}=\begin{bmatrix} y^{(1)}\\ y^{(2)}\\ y^{(3)}\\ ...\\ y^{(m)}\\ \end{bmatrix}

令:

        X=\begin{bmatrix} 1 & x_{1}^{(1)}&x_{2}^{(1)} &... &x_{n}^{(1)} \\ 1 & x_{1}^{(2)}&x_{2}^{(2)} &... &x_{n}^{(2)} \\ 1 & x_{1}^{(3)}&x_{2}^{(3)} &... &x_{n}^{(3)} \\ & ...& & ...&... \\ 1 & x_{1}^{(m)}&x_{2}^{(m)} &... &x_{n}^{(m)} \\ \end{bmatrix}y=\begin{bmatrix} y^{(1)}\\ y^{(2)}\\ y^{(3)}\\ ...\\ y^{(m)}\\ \end{bmatrix}

那麼,

        \theta =\begin{bmatrix} \theta _{0}\\ \theta _{1}\\ \theta _{2}\\ ...\\ \theta _{n}\end{bmatrix}=(X^{T}X)^{-1}X^{T}y        

當然,(X^{T}X)^{-1}有可能不存在,這種情況是極少數。如果不可逆,則一般考慮下面兩種情況:

        (1)移除冗餘特徵。某一些特徵之間存在線性依賴

        (2)特徵太多時,刪除一些特徵,比如(m<n),對於小樣本數據使用正則化。

3.梯度下降法和最小二乘法的選擇

梯度下降法 最小二乘法

缺點:

  • 需要選擇學習率\alpha
  • 需要多次迭代
  • 特徵值範圍相差太大時,需要歸一化

優點:

  • 當特徵數n很大時,能夠較好的工作

優點:

  • 不需要選擇學習率\alpha
  • 不需要多次迭代
  • 不需要歸一化

缺點:

  • 當特徵數n很大時,運算的很慢,因爲求逆矩陣比較慢

通常情況下,當n<10000時,用最小二乘法。當n>=10000時,考慮用梯度下降法。

一些更復雜的算法下只能選擇梯度下降法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章