【機器學習】線性迴歸原理推導與算法描述

該文已經收錄到專題機器學習進階之路當中,歡迎大家關注。

1. 概念

線性迴歸(Linear Regression)是一種通過屬性的線性組合來進行預測的線性模型,其目的是找到一條直線或者一個平面或者更高維的超平面,使得預測值與真實值之間的誤差最小化。

2. 特點

  1. 優點:結果具有很好的可解釋性(w直觀表達了各屬性在預測中的重要性),計算熵不復雜。
  2. 缺點:對非線性數據擬合不好
  3. 適用數據類型:數值型和標稱型數據

3. 原理與推導

1. 給定數據集D = \left\{ {\left( {{x_i},{y_i}} \right)} \right\}_{i = 1}^m,其中x_i=\left( {{x_{i1}},{x_{i2}}, \ldots ,{x_{id}}} \right){y_i} \in R(線性迴歸的輸出空間是整個實數空間)。m是樣本數,d是屬性維度。

線性迴歸試圖學得:

                                    f\left( {{x_i}} \right) = {w^T}{x_i} + b             (1),使得f\left( {{x_i}} \right) \simeq {y_i}

爲便於討論,使b = {w_0} \cdot x{}_0,其中{x_0} = 1。此時,w就成爲了w = \left( {{w_0},{w_1}, \ldots ,{w_d}} \right)x就成爲了x_i=\left( {{1},{x_{i1}}, \ldots ,{x_{id}}} \right),期望學得的函數爲f\left( {{x_i}} \right) = {w^T}{x_i}

2. 預測值和真實值之間都肯定存在差異\varepsilon,對於每個樣本:

                                             {y_i} = {w^T}{x_i} + {\varepsilon _i}                  (2)

假設誤差{\varepsilon _i}是獨立同分布的,並且服從高斯分佈。即:

                                             p\left( {{\varepsilon _i}} \right) = \frac{1}{{\sqrt {2\pi } \sigma }}\exp \left( { - \frac{{{\varepsilon _i}^2}}{{2{\sigma ^2}}}} \right)            (3)

將(2)代入(3)中,得到在已知參數w和數據w_i的情況下,預測值爲y_i的條件概率:

                                              p\left( {{y_i}\left| {{x_i};w} \right.} \right) = \frac{1}{{\sqrt {2\pi } \sigma }}\exp \left( { - \frac{{{{\left( {{y_i} - {w^T}{x_i}} \right)}^2}}}{{2{\sigma ^2}}}} \right)           (4)

3. 將(4)連乘得到在已知參數w和數據x的情況下,預測值爲y的條件概率,這個條件概率在數值上等於,likelihood(w|x,y),也就是在已知現有數據的條件下,w是真正參數的概率,即似然函數(5):

                           L\left( w \right) {\rm{ = }}\prod\limits_{i = 1}^m {p\left( {{y_i}\left| {{x_i};w} \right.} \right)} = \prod\limits_{i = 1}^m {\frac{1}{{\sqrt {2\pi } \sigma }}} \exp \left( { - \frac{{{{\left( {{y_i} - {w^T}{x_i}} \right)}^2}}}{{2{\sigma ^2}}}} \right)          (5)

爲什麼要引入似然函數:爲了根據樣本估計參數值。

爲什麼要對似然函數進行log變換:由於乘法難解,通過對數可以將乘法轉換爲加法,簡化計算。

對數似然函數:

                                    \begin{array}{l} \ell\left( w \right) = \log \prod\limits_{i = 1}^m {\frac{1}{{\sqrt {2\pi } \sigma }}} \exp \left( { - \frac{{{{\left( {{y_i} - {w^T}{x_i}} \right)}^2}}}{{2{\sigma ^2}}}} \right)\\ = \sum\limits_{i = 1}^m {\log \frac{1}{{\sqrt {2\pi } \sigma }}} \exp \left( { - \frac{{{{\left( {{y_i} - {w^T}{x_i}} \right)}^2}}}{{2{\sigma ^2}}}} \right)\\ = \sum\limits_{i = 1}^m {\log \frac{1}{{\sqrt {2\pi } \sigma }}} + \sum\limits_{i = 1}^m {log\left( {\exp \left( { - \frac{{{{\left( {{y_i} - {w^T}{x_i}} \right)}^2}}}{{2{\sigma ^2}}}} \right)} \right)} \\ = m\log \frac{1}{{\sqrt {2\pi } \sigma }} - \sum\limits_{i = 1}^m {\frac{{{{\left( {{y_i} - {w^T}{x_i}} \right)}^2}}}{{2{\sigma ^2}}}} \\ = m\log \frac{1}{{\sqrt {2\pi } \sigma }} - \frac{1}{{{\sigma ^2}}}\frac{1}{2}\sum\limits_{i = 1}^m {{{\left( {{y_i} - {w^T}{x_i}} \right)}^2}} \end{array}          (6)

得到目標函數:

                                    J(w) = \frac{1}{2}\sum\limits_{i = 1}^m {{{\left( {{y_i} - {w^T}{x_i}} \right)}^2}} \\ = \frac { 1 } { 2 } \left\| \left[ \begin{array} { c } { y _ { 1 } - w ^ { T } x _ { 1 } } \\ { y _ { 2 } - w ^ { T } x _ { 2 } } \\ { \cdots } \\ { y _ { m } - w ^ { T } x _ { m } } \end{array} \right] \right\| ^ { 2 }= \frac { 1 } { 2 } \left\| \left[ \begin{array} { l } { y _ { 1 } } \\ { y _ { 2 } } \\ { \cdots } \\ { y _ { m } } \end{array} \right] - w ^ { T } \left[ \begin{array} { c } { x _ { 1 } } \\ { x _ { 2 } } \\ { \cdots } \\ { x _ { m } } \end{array} \right] \right\| ^ { 2 } \\ = \frac{1}{2}{\left\| {y - {w^T}X} \right\|^2} = \frac{1}{2}{\left( {y - {w^T}x} \right)^T}\left( {y - {w^T}x} \right)          (7)(最小二乘法)

爲什麼要讓目標函數越小越好:似然函數表示樣本成爲真實的概率,似然函數越大越好,也就是目標函數J\left( w \right)越小越好。

4. 目標函數是凸函數,只要找到一階導數爲0的位置,就找到了最優解。

因此求偏導:

                                             \begin{array}{l} \frac{{\partial J\left( w \right)}}{{\partial w}} = \frac{1}{2}\frac{\partial }{{\partial w}}\left( {{{\left( {y - {w^T}x} \right)}^T}\left( {y - {w^T}x} \right)} \right)\\ = \frac{1}{2}\frac{\partial }{{\partial w}}\left( {{{\left( {y - Xw} \right)}^T}\left( {y - Xw} \right)} \right)\\ = \frac{1}{2}\frac{\partial }{{\partial w}}\left( {{w^T}{X^T}Xw - 2{w^T}Xy + {y^T}y} \right)\\ {\rm{ = }}\frac{1}{2}\left( {{X^T}Xw{\rm{ + }}{X^T}Xw{\rm{ - }}2Xy} \right)\\ {\rm{ = }}{X^T}Xw{\rm{ - }}Xy \end{array}          (8)

5. 令偏導等於0:

                                             \frac{{\partial J\left( w \right)}}{{\partial w}} = {\rm{0}}          (9)

得到:

                                             {X^T}Xw = Xy         (10)

情況一:{X^T}X可逆,唯一解。令公式(10)爲零可得最優解爲:

                                             w^* = {\left( {{X^T}X} \right)^{ - 1}}X^Ty         (11)

               學得的線性迴歸模型爲:

                                             \mathop y\limits^ \wedge = {w^T}X = {X^T}w = {X^T}{\left( {{X^T}X} \right)^{ - 1}}{X^T}y      (12)

情況二:{X^T}X不可逆,可能有多個解。選擇哪一個解作爲輸出,將有學習算法的偏好決定,常見的做法是增加\lambda擾動。

                                             {w^*} = {\left( {{X^T}X + \lambda I} \right)^{ - 1}}{X^T}y      (13)

4. 算法描述

1. 從數據集D出發,構建輸入矩陣X和輸出向量y。

                                             X = \left[ \begin{array} { c } { x _ { 1 } ^ { T } } \\ { x _ { 2 } ^ { T } } \\ { \cdots } \\ { x _ { m } ^ { T } } \end{array} \right] \quad y = \left[ \begin{array} { c } { y _ { 1 } } \\ { y _ { 2 } } \\ { \dots } \\ { y _ { m } } \end{array} \right]     

2. 計算僞逆(pseudo-inverse){X^ + }

3. 返回{w^*} = {X^ + }y,學得的線性迴歸模型爲\mathop y\limits^ \wedge = {w^T}X

5. 廣義線性迴歸

y不再只是線性迴歸中用到的正態分佈,而是擴大爲指數族中的任一分佈。這樣得到的模型稱爲“廣義線性模型”(generalized linear model):

                                             y = {g^{ - 1}}\left( {{w^T}x + b} \right)

其中函數g\left( \cdot \right)稱爲“聯繫函數”(link function)。

參考文獻:

1. 《機器學習基石課程》lecture_9_Linear_Regression——林軒田

2. 《機器學習》第三章線性迴歸——周志華

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