線性迴歸可以說是機器學習中最基本的問題型別了,這裡就對線性迴歸的原理和演算法做一個小結。
1. 線性迴歸的模型函式和損失函式
線性迴歸遇到的問題一般是這樣的。我們有m個樣本,每個樣本對應於n維特徵和一個結果輸出,如下:
\((x_1^{(0)}, x_2^{(0)}, ...x_n^{(0)}, y_0), (x_1^{(1)}, x_2^{(1)}, ...x_n^{(1)},y_1), ... (x_1^{(m)}, x_2^{(m)}, ...x_n^{(m)}, y_m)\)
我們的問題是,對於一個新的\((x_1^{(x)}, x_2^{(x)}, ...x_n^{(x)} \), 他所對應的\(y_x\)是多少呢? 如果這個問題裡面的y是連續的,則是一個迴歸問題,否則是一個分類問題。
對於n維特徵的樣本資料,如果我們決定使用線性迴歸,那麼對應的模型是這樣的:
\(h_\theta(x_1, x_2, ...x_n) = \theta_0 + \theta_{1}x_1 + ... + \theta_{n}x_{n}\), 其中\(\theta_i \) (i = 0,1,2... n)為模型引數,\(x_i \) (i = 0,1,2... n)為每個樣本的n個特徵值。這個表示可以簡化,我們增加一個特徵\(x_0 = 1 \) ,這樣\(h_\theta(x_0, x_1, ...x_n) = \sum\limits_{i=0}^{n}\theta_{i}x_{i}\)。
進一步用矩陣形式表達更加簡潔如下:
\(h_\mathbf{\theta}(\mathbf{X}) = \mathbf{X\theta}\)
其中, 假設函式\(h_\mathbf{\theta}(\mathbf{X})\)為mx1的向量,\(\mathbf{\theta}\)為nx1的向量,裡面有n個代數法的模型引數。\(\mathbf{X}\)為mxn維的矩陣。m代表樣本的個數,n代表樣本的特徵數。
得到了模型,我們需要求出需要的損失函式,一般線性迴歸我們用均方誤差作為損失函式。損失函式的代數法表示如下:
\(J(\theta_0, \theta_1..., \theta_n) = \sum\limits_{i=0}^{m}(h_\theta(x_0, x_1, ...x_n) - y_i)^2\)
進一步用矩陣形式表達損失函式:
\(J(\mathbf\theta) = \frac{1}{2}(\mathbf{X\theta} - \mathbf{Y})^T(\mathbf{X\theta} - \mathbf{Y})\)
由於矩陣法表達比較的簡潔,後面我們將統一採用矩陣方式表達模型函式和損失函式。
2. 線性迴歸的演算法
對於線性迴歸的損失函式\(J(\mathbf\theta) = \frac{1}{2}(\mathbf{X\theta} - \mathbf{Y})^T(\mathbf{X\theta} - \mathbf{Y})\),我們常用的有兩種方法來求損失函式最小化時候的\(\mathbf{\theta}\)引數:一種是梯度下降法,一種是最小二乘法。由於已經在其它篇中單獨介紹了梯度下降法和最小二乘法,可以點連結到對應的文章連結去閱讀。
如果採用梯度下降法,則\(\mathbf{\theta}\)的迭代公式是這樣的:
\(\mathbf\theta= \mathbf\theta - \alpha\mathbf{X}^T(\mathbf{X\theta} - \mathbf{Y})\)
通過若干次迭代後,我們可以得到最終的\(\mathbf{\theta}\)的結果
如果採用最小二乘法,則\(\mathbf{\theta}\)的結果公式如下:
\( \mathbf{\theta} = (\mathbf{X^{T}X})^{-1}\mathbf{X^{T}Y} \)
當然線性迴歸,還有其他的常用演算法,比如牛頓法和擬牛頓法,這裡不詳細描述。
3. 線性迴歸的推廣:多項式迴歸
回到我們開始的線性模型,\(h_\theta(x_1, x_2, ...x_n) = \theta_0 + \theta_{1}x_1 + ... + \theta_{n}x_{n}\), 如果這裡不僅僅是x的一次方,比如增加二次方,那麼模型就變成了多項式迴歸。這裡寫一個只有兩個特徵的p次方多項式迴歸的模型:
\(h_\theta(x_1, x_2) = \theta_0 + \theta_{1}x_1 + \theta_{2}x_{2} + \theta_{3}x_1^{2} + \theta_{4}x_2^{2} + \theta_{5}x_{1}x_2\)
我們令\(x_0 = 1, x_1 = x_1, x_2 = x_2, x_3 =x_1^{2}, x_4 = x_2^{2}, x_5 = x_{1}x_2\) ,這樣我們就得到了下式:
\(h_\theta(x_1, x_2) = \theta_0 + \theta_{1}x_1 + \theta_{2}x_{2} + \theta_{3}x_3 + \theta_{4}x_4 + \theta_{5}x_5\)
可以發現,我們又重新回到了線性迴歸,這是一個五元線性迴歸,可以用線性迴歸的方法來完成演算法。對於每個二元樣本特徵\((x_1,x_2)\),我們得到一個五元樣本特徵\((1, x_1, x_2, x_{1}^2, x_{2}^2, x_{1}x_2)\),通過這個改進的五元樣本特徵,我們重新把不是線性迴歸的函式變回線性迴歸。
4. 線性迴歸的推廣:廣義線性迴歸
在上一節的線性迴歸的推廣中,我們對樣本特徵端做了推廣,這裡我們對於特徵y做推廣。比如我們的輸出\(\mathbf{Y}\)不滿足和\(\mathbf{X}\)的線性關係,但是\(ln\mathbf{Y}\) 和\(\mathbf{X}\)滿足線性關係,模型函式如下:
\(ln\mathbf{Y} = \mathbf{X\theta}\)
這樣對與每個樣本的輸入y,我們用 lny去對應, 從而仍然可以用線性迴歸的演算法去處理這個問題。我們把 Iny一般化,假設這個函式是單調可微函式\(\mathbf{g}(.)\),則一般化的廣義線性迴歸形式是:
\(\mathbf{g}(\mathbf{Y}) = \mathbf{X\theta}\) 或者 \(\mathbf{Y} = \mathbf{g^{-1}}(\mathbf{X\theta})\)
這個函式\(\mathbf{g}(.)\)我們通常稱為聯絡函式。
5. 線性迴歸的正則化
為了防止模型的過擬合,我們在建立線性模型的時候經常需要加入正則化項。一般有L1正則化和L2正則化。
線性迴歸的L1正則化通常稱為Lasso迴歸,它和一般線性迴歸的區別是在損失函式上增加了一個L1正則化的項,L1正則化的項有一個常數係數\(\alpha\)來調節損失函式的均方差項和正則化項的權重,具體Lasso迴歸的損失函式表示式如下:
\(J(\mathbf\theta) = \frac{1}{2}(\mathbf{X\theta} - \mathbf{Y})^T(\mathbf{X\theta} - \mathbf{Y}) + \alpha||\theta||_1\)
其中n為樣本個數,\(\alpha\)為常數係數,需要進行調優。\(||\theta||_1\)為L1範數。
Lasso迴歸可以使得一些特徵的係數變小,甚至還是一些絕對值較小的係數直接變為0。增強模型的泛化能力。
Lasso迴歸的求解辦法一般有座標軸下降法(coordinate descent)和最小角迴歸法( Least Angle Regression),由於它們比較複雜,在我的這篇文章單獨講述: 執行緒迴歸的正則化-Lasso迴歸小結
線性迴歸的L2正則化通常稱為Ridge迴歸,它和一般線性迴歸的區別是在損失函式上增加了一個L2正則化的項,和Lasso迴歸的區別是Ridge迴歸的正則化項是L2範數,而Lasso迴歸的正則化項是L1範數。具體Ridge迴歸的損失函式表示式如下:
\(J(\mathbf\theta) = \frac{1}{2}(\mathbf{X\theta} - \mathbf{Y})^T(\mathbf{X\theta} - \mathbf{Y}) + \frac{1}{2}\alpha||\theta||_2^2\)
其中\(\alpha\)為常數係數,需要進行調優。\(||\theta||_2\)為L2範數。
Ridge迴歸在不拋棄任何一個特徵的情況下,縮小了迴歸係數,使得模型相對而言比較的穩定,但和Lasso迴歸比,這會使得模型的特徵留的特別多,模型解釋性差。
Ridge迴歸的求解比較簡單,一般用最小二乘法。這裡給出用最小二乘法的矩陣推導形式,和普通線性迴歸類似。
令\(J(\mathbf\theta)\)的導數為0,得到下式:
\(\mathbf{X^T(X\theta - Y) + \alpha\theta} = 0\)
整理即可得到最後的\(\theta\)的結果:
\(\mathbf{\theta = (X^TX + \alpha E)^{-1}X^TY}\)
其中E為單位矩陣。
除了上面這兩種常見的線性迴歸正則化,還有一些其他的線性迴歸正則化演算法,區別主要就在於正則化項的不同,和損失函式的優化方式不同,這裡就不累述了。
(歡迎轉載,轉載請註明出處。歡迎溝通交流: liujianping-ok@163.com)