線性迴歸考慮的是有$n$個樣本$\{\mathbf{x}_1,\mathbf{x}_2,\cdots,\mathbf{x}_n\}$,每個樣本對應$m+1$維特徵$\mathbf{x}_i=\{x_{i0},x_{i1},x_{i2},\cdots,x_{im}\}$(其中$x_{i0}=1$),記爲$\mathbf{X}_{n\times (m+1)}$,且每個樣本都一個對應的標籤,記爲$\mathbf{y}_{n}$。須要找到參數$\mathbf{w}_{m+1}$,構造以下模型,html
$$
h_{\mathbf{w}}\left(\mathbf{X}\right)=\mathbf{X}\mathbf{w}=\begin{pmatrix}
x_{10} & x_{11} & \cdots & x_{1m} \\
x_{20} & \ddots & \cdots & \vdots \\
\vdots & \cdots & \ddots & \vdots \\
x_{n0} & \cdots & \cdots & x_{nm)}
\end{pmatrix}\begin{pmatrix}
w_0\\
w_1\\
\vdots\\
w_m
\end{pmatrix},
$$python
擬合出來的結果與真實目標之間的偏差能夠表示以下,git
$$
J(\mathbf{w})=\frac{1}{2}\left(\mathbf{X}\mathbf{w}-\mathbf{y}\right)^T\left(\mathbf{X}\mathbf{w}-\mathbf{y}\right),
$$github
其中,加入常數因子$\frac{1}{2}$是爲了求導方便。算法
求解上述問題,等價於最小化$J(\mathbf{w})$,即令以下等式成立,函數
$$
\frac{\partial J}{\partial \mathbf{w}}=\mathbf{X}^T\left(\mathbf{X}\mathbf{w}-\mathbf{y} \right )=0,
$$學習
可通過以下變換解得$\mathbf{w}$,.net
$$\Leftrightarrow \mathbf{X}^T\mathbf{X}\mathbf{w}-\mathbf{X}^T\mathbf{y}=0,
\Leftrightarrow \mathbf{X}^T\mathbf{X}\mathbf{w}=\mathbf{X}^T\mathbf{y},
\Leftrightarrow \mathbf{w}^{*}=\left(\mathbf{X}^T\mathbf{X} \right )^{-1}\mathbf{X}^T\mathbf{y},$$htm
上述求解線性迴歸問題的方法即便最小二乘法(屬於精確求解)。blog
建設數據分佈符合高斯分佈(正態分佈),那麼模型偏差也將符合高斯分佈(正態分佈),對於第$i$個樣本的預測偏差,有以下機率形式,
$$
P(y_i|\mathbf{x}_i,\mathbf{w})=\frac{1}{\sqrt{2\pi}\sigma }e^{-\frac{\left( y_i-\mathbf{x}_i\mathbf{w}\right)^2}{2\sigma^2}},
$$
那麼,對於全部樣本的預測偏差,能夠表示以下,
$$
l(\mathbf{w};\mathbf{y})\\=log L(\mathbf{w};\mathbf{y})\\=log\prod_{i=1}^{n}P(y_i|\mathbf{x}_i,\mathbf{w})\\=\sum_{i=1}^nlogP(y_i|\mathbf{x}_i,\mathbf{w})\\=\sum_{i=1}^nlog\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{\left(y_i-\mathbf{x}_i \mathbf{w}\right )^2}{2\sigma^2}} \\=nlog\frac{1}{\sqrt{2\pi}\sigma}-\frac{1}{2\sigma^2}\sum_{i=1}^{n}\left(y_i-\mathbf{x}_i\mathbf{w} \right )^2,
$$
令$\triangledown_{\mathbf{w}}l(\mathbf{w};\mathbf{y})=0$,經過以下過程可解得$\mathbf{w}$,
$$
\triangledown_{\mathbf{w}}l(\mathbf{w};\mathbf{y})=\frac{1}{\sigma^2}\mathbf{X}^T(\mathbf{y}-\mathbf{X}\mathbf{w})\\
\Leftrightarrow \mathbf{w}^{*}=(\mathbf{X}^T\mathbf{X})^{-1}\mathbf{X}^T\mathbf{y},
$$
上述結果代表,在高斯分佈下的MLE和最小二乘法的求解結果是等價的(一個問題的多種角度)。
最小二乘法和MLE均爲精確方法,但在實際求解過程當中可能會有$\mathbf{X}^T\mathbf{X}$的逆不存在或者樣本太多或者因爲求解$\left(\mathbf{X}^T\mathbf{X}\right)^{-1}$時偏差很大致使算法缺少穩定性和可靠性等狀況,所以精確方法不是萬能的。梯度降低法是解決線性迴歸問題的經常使用的非精確方法(迭代法),其迭代公式以下,
$$
\mathbf{w}=\mathbf{w}-\alpha \triangledown J\left( \mathbf{w} \right )=\mathbf{w}-\alpha\mathbf{X}^T\left( \mathbf{X}\mathbf{w}-\mathbf{y}\right ),
$$
通過若干次迭代以後,便可獲得逼近於最優值的$\mathbf{w}$。
下面介紹兩種線性迴歸的推廣方法:多項式線性迴歸以及廣義線性迴歸。
上述的線性迴歸只適用於擬合多元一階方程,這裏舉一個例子,方便後面討論。例如對於有2個特徵的第$i$個樣本,上述線性迴歸能夠描述爲,
$$
y_i=w_0+w_1x_{i1}+w_2x_{i2}。
$$
爲了擬合高階多項式(這裏以二階爲例),能夠將模型改寫爲以下,
$$
y_i=w_0+w_1x_{i1}+w_2x_{i2}+w_3x_{i3}+w_4x_{i4}+w_5x_{i5},
$$
其中$x_1=x_1,\ x_2=x_2,\ x_3=x_1^2,\ x_4=x_2^2,\ x_5=x_1x_2$,能夠發現,通過改寫以後高階多項式迴歸問題又能夠用線性迴歸的方法進行解決。
在實際問題中,每每$\mathbf{y}$與$\mathbf{X}$之間不知足線性關係,可是$\mathbf{y}$通過單調可微函數$g(\cdot)$的「激活」(在深度學習中經常使用的術語)以後,能夠與$\mathbf{X}$知足線性關係。所以,能夠將線性迴歸推廣到廣義線性迴歸,以下,
$$
g\left(\mathbf{y}\right)=\mathbf{X}\mathbf{w}^T,
$$
注意到,通常線性迴歸爲當$g(\cdot)$爲線性激活時的特殊狀況。
考慮最小二乘法的求解公式,
$$
\mathbf{w}^{*}=\left(\mathbf{X}^T\mathbf{X} \right )^{-1}\mathbf{X}^T\mathbf{y},
$$
其中,當$\mathbf{X}$不是滿秩或者某些列之間的線性相關性較大時,$\mathbf{X}^T\mathbf{X}$的行列式接近於0(即$\mathbf{X}^T\mathbf{X}$接近於奇異),此時計算$\left(\mathbf{X}^T\mathbf{X}\right)^{-1}$時的偏差會很大,所以最小二乘法和MLE將缺少穩定性和可靠性(不適定問題)。
要將不適定問題轉化成適定問題,能夠給損失函數加上一個正則化項,有以下兩種方法:L1正則化和L2正則化。
L2正則化便是給損失函數加上一個關於$\mathbf{w}$的二次正則項,以下,
$$
J(\mathbf{w})=\frac{1}{2}\left \|\mathbf{X}\mathbf{w}-\mathbf{y}^* \right \|^2_2+\lambda \left \| \mathbf{w}\right \|_1,
$$
注意到,該損失函數在$\mathbf{w}$處是不可導的,所以上述的全部方法均失效,能夠採用座標軸降低法或者最小角迴歸法進行求解(具體參考此博客)。
(注:Lasso迴歸可使得一些特徵的係數變小,甚至仍是一些絕對值較小的係數直接變爲0。加強模型的泛化能力。)
L2正則化便是給損失函數加上一個關於$\mathbf{w}$的二次正則項,以下,
$$
J(\mathbf{w})=\left \|\mathbf{X}\mathbf{w}-\mathbf{y}^* \right \|^2_2+\lambda \left \| \mathbf{w}\right \|^2_2,
$$
最小化$J(\mathbf{w})$,即令以下等式成立,
$$
\frac{\partial J}{\partial \mathbf{w}}=\mathbf{X}^T\left(\mathbf{X}\mathbf{w}-\mathbf{y} \right )+2\lambda\mathbf{w}=0,
$$
解得$\mathbf{w}^{ridge}=\left(\mathbf{X}^T\mathbf{X}+\lambda\mathbf{I} \right )^{-1}\mathbf{X}^T\mathbf{y}$。
(注:Ridge迴歸在不拋棄任何一個特徵的狀況下,縮小了迴歸係數,使得模型相對而言比較的穩定,但和Lasso迴歸比,這會使得模型的特徵留的特別多,模型解釋性差。)
線性迴歸的python代碼可見於個人github(實現了最小二乘法和梯度降低法),結果以下(LSM爲最小二乘法,GD爲梯度降低法)。
http://www.javashuo.com/article/p-qkchdrhi-ep.html
http://www.javashuo.com/article/p-tqqbiimm-na.html
https://blog.csdn.net/xgxyxs/article/details/79436195
https://blog.csdn.net/u012559269/article/details/80564606
https://github.com/czifan/Notebooks/tree/master/Linear%20Regression