線性迴歸形式簡單、易於建模,但卻蘊涵着機器學習中一些重要的基本思想。許多功能更爲強大的非線性模型(nonlinear model)可在線性模型的基礎上經過引入層級結構或高維映射而得。此外,因爲線性迴歸的解\(\theta\)直觀表達了各屬性在預測中的重要性,所以線性迴歸有很好的可解釋性。算法
線性迴歸遇到的問題通常是這樣的。咱們有\(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_n) \]
咱們主要作的是經過找到參數\((\theta_0,\theta_1,...\theta_m)\),線性迴歸模型以下:
\[ h_\theta(x_1, x_2, ...x_n) = \theta_0 + \theta_{1}x_1 + ... + \theta_{n}x_{n} \]
矩陣化以下:
\[ h_θ(X)=Xθ \]
獲得了模型,咱們須要求出須要的損失函數,通常線性迴歸咱們用均方偏差做爲損失函數。損失函數的代數法表示以下:
\[ 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}) \]spa
對於線性迴歸的損失函數\(J(\mathbf\theta)=\frac{1}{2}(\mathbf{X\theta}-\mathbf{Y})^T(\mathbf{X\theta}-\mathbf{Y})\),咱們經常使用的有兩種方法來求損失函數最小化時候的\(θ\)參數:一種是梯度降低法,一種是最小二乘法。it
若是採用梯度降低法,則\(\theta\)的迭代公式是這樣的:
\[ \mathbf\theta= \mathbf\theta - \alpha\mathbf{X}^T(\mathbf{X\theta} - \mathbf{Y}) \]
經過若干次迭代後,咱們能夠獲得最終的\(\theta\)的結果class
若是採用最小二乘法,則\(\theta\)的結果公式以下:基礎
\[ \mathbf{\theta} = (\mathbf{X^{T}X})^{-1}\mathbf{X^{T}Y} \]
固然線性迴歸,還有其餘的經常使用算法,好比牛頓法和擬牛頓法,這裏不詳細描述。原理
咱們遇到的數據不必定都是線性的形式,若是式\(y=x_1^2+x_2^2\)的模型,那線性迴歸很難擬合這個函數,這時候就須要用到多項式迴歸了。model
回到咱們開始的線性模型,\(h_\theta(x_1, x_2, ...x_n) = \theta_0 + \theta_{1}x_1 + ... + \theta_{n}x_{n}\), 若是這裏不只僅是x的一次方,而是二次方,那麼模型就變成了多項式迴歸。這裏寫一個只有兩個特徵的2次多項式迴歸的模型:
\[ 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^2_1,x^2_2,x_1x_2)\),經過這個改進的五元樣本特徵,咱們從新把不是線性迴歸的函數變回線性迴歸,可是達到了非線性擬合的效果。
在上一節的線性迴歸的多項式中,咱們對樣本特徵進行了變換,用線性迴歸完成了非線性迴歸的效果。這裏咱們對於特徵\(y\)作推廣。好比咱們的輸出\(Y\)不知足和\(X\)的線性關係,可是\(logY\)和\(X\)知足線性關係,模型函數以下:
\[ logY=Xθ \]
這樣對與每一個樣本的輸入\(y\),咱們用\(logy\)去對應, 從而仍然能夠用線性迴歸的算法去處理這個問題。咱們把 \(logy\)通常化,假設這個函數是單調可微函數\(g(.)\),則通常化的廣義線性迴歸形式是:\(g(Y)=Xθ\)或者\(Y=g^{-1}(Xθ)\)。這個函數g(.)咱們一般稱爲聯繫函數。後面會講到的邏輯迴歸這是在聯繫函數的基礎上進行分類的。
爲了防止模型的過擬合,咱們在創建線性模型的時候常常須要加入正則化項。通常有L1正則化和L2正則化。
L1正則化一般稱爲Lasso迴歸,它和通常線性迴歸的區別是在損失函數上增長了一個L1正則化的項,L1正則化的項有一個常數係數\(\alpha\)來調節損失函數的均方差項和正則化項的權重,具體Lasso迴歸的損失函數表達式以下:
\[ J(θ)=\frac{1}{2n}(Xθ-Y)^T(Xθ-Y)+\alpha|θ|_1 \]
其中\(n\)爲樣本個數,\(\alpha\)爲常數係數,須要進行調優。\(|θ|_1\)爲L1範數。
Lasso迴歸可使得一些特徵的係數變小,甚至仍是一些絕對值較小的係數直接變爲0。加強模型的泛化能力。
L2正則化一般稱爲Ridge迴歸,它和通常線性迴歸的區別是在損失函數上增長了一個L2正則化的項,和Lasso迴歸的區別是Ridge迴歸的正則化項是L2範數,而Lasso迴歸的正則化項是L1範數。具體Ridge迴歸的損失函數表達式以下:
\[ J(θ)=\frac{1}{2}(Xθ-Y)^T(Xθ-Y)+\frac{1}{2}\alpha|θ|_2^2 \]
其中\(\alpha\)爲常數係數,須要進行調優。\(|θ|2\)爲L2範數。
Ridge迴歸在不拋棄任何一個特徵的狀況下,縮小了迴歸係數,使得模型相對而言比較的穩定,但和Lasso迴歸比,這會使得模型的特徵留的特別多,模型解釋性差。
線性迴歸的算法自己並不複雜,可是在它的基礎上延伸出來的內容可謂是至關豐富,涉及到了多項式中的特徵轉換(特徵工程)、針對過擬合的正則化項、運用很是普遍的邏輯迴歸等。要真正理解它須要對機器學習的知識融匯貫通。