線性迴歸大結局(嶺(Ridge)、 Lasso迴歸原理、公式推導),你想要的這裡都有

2022-09-27 06:06:38

本文已參與「新人創作禮」活動,一起開啟掘金創作之路。

線性模型簡介

所謂線性模型就是通過資料的線性組合來擬合一個資料,比如對於一個資料 \(X\)

\[X = (x_1, x_2, x_3, ...,x_n) \tag{1} \]

\[Y = f(X) = a_1x_1 + a_2x_2 + ... a_nx_n + b \tag{2} \]

來預測 \(Y\)的數值。例如對於人的兩個屬性 (鞋碼,體重) 來預測 身高 。從上面來看線性模型的表示式簡單、比較容易建模,但是卻有很好的解釋性。比如 身高\((H)\)和鞋碼\((S)\)、體重\((W)\)的關係:

\[H=0.3*S + 0.7*W + 20 \tag{3} \]

所謂解釋性簡單一點來說就是知道模型哪個屬性更加重要,比如說對於上述表示式來說,就意味著對於身高來說體重的因素比較大,體重更加重要,這個例子純為了解釋為什麼線性模型有很好的解釋性,可能不夠嚴謹。對於線性模型來說,旨在學習到所有的 \(a_i, b\),即模型的引數。

普通線性迴歸

對於一個資料集

\[Dataset = \{ (x_1, y_1), (x_2, y_2), (x_3, y_3), ..., (x_n, y_n) \} \ \ , \ y_i \in R \tag{4} \]

其中 \(x_i\), 可能含有多個屬性,如 \(x_i\)\(m\)個屬性時, 即 \(x_i = (x_{i1}, x_{i2}, ..., x_{im})\)\(y_i\) 是一個實數值。線性迴歸需要做的事就是需要找到一套引數儘可能的使得模型的輸出跟 \(y_i\)接近。

不妨設如下表示式,我們的目標就是讓 \(f(x_i)\) 越靠近真實的 $y_i $越好。

\[f(x_i) = a_1x_{i1} + a_2x_{i2} + ... + a_mx_{im} + b \tag{5} \]

即 :

\[f(x_i) = b + \sum_{j = 1}^{m}a_jx_{ij} \tag{6} \]

為了方便使用一個式子表示整個表示式,不妨令 :

\[x_i = (x_{i1}, x_{i2}, ..., x_{im}, 1) \tag{7} \]

\[\hat{w} = (a_1, a_2, ..., a_m, b)^T \tag{8} \]

上述表示式用矩陣形式表示為 :

\[\left[ \begin{matrix} x_{i1} & x_{i2} & x_{i3} & ... & x_{i(m - 1)} & x_{im} & 1\end{matrix} \right] \cdot \left[\begin{matrix} a_1 \\ a_2 \\ a_3 \\ .\\.\\. \\ a_{m-1} \\ a_m \\ b\end{matrix} \right] = f(x_i) \tag{9} \]

簡寫為 :

\[f(x_i) = x_i\cdot \hat{w} \tag{10} \]

現在需要來衡量模型的輸出和真實值之間的差異,我們這裡使用均方誤差\(MSE(Mean\ Squared\ Error)\)來衡量,即對於 \(y_i\)來說誤差為:

\[\mathcal{l_i} = (f(x_i) - y_i)^2 \tag{11} \]

像這種基於最小化 \(MSE\) 來求解模型引數的方法叫做最小二乘法。對於整個資料集來說他的誤差為 \(\mathcal{L}\)

\[\mathcal{L} = \sum_{i = 1}^{n}(f(x_i) - y_i)^2\ \tag{12} \]

現在我們將他們用矩陣來表示 其中 :

\[Y = (y_1, y_2, y_3, ..., y_{n - 2}, y_{n - 1}, y_{n})^T = \left[\begin{matrix}y_1 \\ y_2 \\ y_3 \\ . \\. \\. \\ y_{n - 2} \\ y_{n - 1}\\ y_{n}\end{matrix}\right] \tag{13} \]

\[X = (x_1; ...; x_n)= (x_1, ..., x_n)^T = \left[\begin{matrix}x_1 \\ x_2 \\ . \\. \\. \\ x_{n-1}\\ x_{n}\end{matrix}\right]= \left[\begin{matrix}x_{11} & x_{12} & x_{13} & . .. & x_{1m} &1& \\ x_{21} & x_{22} & x_{23} & ... & x_{2m} &1& \\ . & . & . & . & . &.\\. & . & . & . & . &. \\ . & . & . & . & . &. \\ x_{(n - 1)1} & x_{(n - 1)2} & x_{(n - 1)3} & ... & x_{(n - 1)m} &1\\ x_{n1} & x_{n2} & x_{n3} & ... & x_{nm} & 1\end{matrix}\right] \tag{14} \]

\[f(X) = \left[\begin{matrix}x_{11} & x_{12} & x_{13} & . .. & x_{1m} &1& \\ x_{21} & x_{22} & x_{23} & ... & x_{2m} &1& \\ . & . & . & . & . &.\\. & . & . & . & . &. \\ . & . & . & . & . &. \\ x_{(n - 1)1} & x_{(n - 1)2} & x_{(n - 1)3} & ... & x_{(n - 1)m} &1\\ x_{n1} & x_{n2} & x_{n3} & ... & x_{nm} & 1\end{matrix}\right] \cdot \left[\begin{matrix} a_1 \\ a_2 \\ a_3 \\ .\\.\\. \\ a_{m-1} \\ a_m \\ b\end{matrix} \right] = \left[\begin{matrix} x_1\hat{w} \\ x_2\hat{w} \\ x_3\hat{w} \\ .\\.\\. \\ x_{n-2}\hat{w} \\ x_{n - 1}\hat{w} \\ x_{n}\hat{w}\end{matrix} \right] = \left[\begin{matrix}\hat{y}_1\\ \hat{y}_2\\ \hat{y}_3\\ \\.\\.\\.\\\hat{y}_{n-2}\\\hat{y}_{n-1}\\\hat{y}_n\\ \end{matrix}\right] \tag{15} \]

其中 \(\hat{y}_i\) 是模型的預測值 \(y_i\) 是資料的真實值,\(m\) 是一條資料 \(x_i\)的屬性的個數。現在來梳理一下資料的維度:

\[X : n\times (m+1) \\ \hat{w} : (m+1)\times 1\\ Y : n\times 1 \\ f(X) : n\times 1 \]

那容易得出,對於整個資料集的誤差為 \(\mathcal{L}(w, b)\)

\[\mathcal{L}(w, b) = \mathcal{L}({\hat{w}}) = \sum_{i=1}^{n}( \hat{y} - y_i)^2 = \sum_{i=1}^{n}(x_i\hat{w}-y_i)^2 = ||X\hat{w}-Y||_2^2 = (X\hat{w}-Y)^T(X\hat{w}-Y) \tag{16} \]

\[x_i = (x_{i1}, x_{i2}, ..., x_{im}, 1)\\ \hat{w} = (a_1, a_2, ..., a_m, b)^T \]

現在來仔細分析一下公式\((16)\),首先對於一個\(1\times n\)或者\(n \times 1\)向量來說,它的二範數為:

\[||x||_2 = \sqrt{\sum_{i=1}^{n}x_i^2} \]

二範數平方為:

\[||x||_2^2 = \sum_{i=1}^{n}x_i^2 \]

所以就有了 \(\sum_{i=1}^{n}(X\hat{w}-Y)^2 = ||Y-X\hat{w}||_2^2\), 那麼對於公式\((16)\)來說 \(X\hat{w}-Y\) 是一個 \(n\times 1\)的向量:

\[X\hat{w}-Y = \left[\begin{matrix}\hat{y}_1 - y_1 \\ \hat{y}_2 - y_2 \\.\\.\\.\\\hat{y}_{n-1} - y_{n-1} \\\hat{y}_{n}- y_{n} \end{matrix}\right] \]

所以根據矩陣乘法就有:

\[(X\hat{w} - Y)^T(X\hat{w} - Y)=\left[\begin{matrix} \hat{y}_1 - y_1 ,&..., &\hat{y}_{n} - y_{n} \end{matrix}\right]\cdot \left[\begin{matrix}\hat{y}_1 - y_1 \\\hat{y}_2 - y_2 \\.\\.\\.\\\hat{y}_{n-1} - y_{n-1} \\\hat{y}_{n} - y_{n} \end{matrix}\right] = \sum_{i=1}^{n}(\hat{y}- y_i )^2 \tag{17} \]

根據上面的分析最終就得到了模型的誤差:

\[\mathcal{L}(w, b) = \mathcal{L(\hat{w})} = ||X\hat{w} - Y||_2^2 = (X\hat{w} - Y)^T(X\hat{w} - Y) \tag{18} \]

現在就需要最小化模型的誤差,即優化問題,易知\(\mathcal{L(w, b)}\)是一個關於 \(\hat{w}\) 的凸函數,則當它關於\(\hat{w}\)導數為0時求出的\(\hat{w}\)\(\hat{w}\)的最優解。這裡不對其是凸函數進行解釋,如果有時間以後專門寫一篇文章來解讀。現在就需要對\(\hat{w}\)進行求導。

\[\mathcal{L(\hat{w})} = ||X\hat{w} - Y||_2^2 = (X\hat{w} - Y)^T(X\hat{w} - Y) \]

\[= ((X\hat{w})^T - Y^T)(X\hat{w} - Y) = (\hat{w}^TX^T - Y^T)(X\hat{w} - Y) \]

\[=\hat{w}^TX^TX\hat{w} - \hat{w}^TX^TY - Y^TX\hat{w} + Y^TY \]

我們現在要對上述公式進行求導,我們先來推導一下矩陣求導法則,請大家扶穩坐好