线性回归考虑的是有$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