岭(Ridge 线性回归大结局、 Lasso回归原理、公式推导),你想要的这里都有

本文已参与「新人创作礼」活动,一起开启掘金创作之路 。
线性模型简介所谓线性模型就是通过数据的线性组合来拟合一个数据,比如对于一个数据 \(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}\]【岭(Ridge 线性回归大结局、 Lasso回归原理、公式推导),你想要的这里都有】现在需要来衡量模型的输出和真实值之间的差异,我们这里使用均方误差\(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\)向量来说,它的二范数为:

推荐阅读