在统计学中,线性回归(Linear Regression)是利用称为线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析。这种函数是一个或多个称为回归系数的模型参数的线性组合。只有一个自变量的情况称为简单回归,大于一个自变量情况的叫做多元回归。(这反过来又应当由多个相关的因变量预测的多元线性回归区别,而不是一个单一的标量变量。)
回归方程/函数
总所周知,线性回归大致可以分为一元线性回归和多元线性回归,一元线性回归的式子如下:
$$ f(x) = w_0 + w_1 x_i $$
多元线性回归的式子如下:
$$ f(x_1, x_2, ... , x_n) = w_0 + w_1 x_1 + w_2 x_2 + ... + w_n x_n $$
写成矩阵方程如下:
$$ f(X) = W^T X + b $$
其中
$$ W = (w_1, w_2, ..., w_n), b = w_0 $$
线性回归模型的目标就是通过一系列的参数 $w$ 使得 $f(x)$ 尽可能贴近所有的数据。
衡量预测值与实际值的距离
一般我们在线性回归中使用的都是均方误差(最小二乘法)来作为损失函数。
使用均方误差的原因:有十分好的几何意义,对应了常用的欧式距离。在线性回归中,就是找到一个直线,使得所有样本到直线的欧式距离最小。
具体式子为:
$$ J(w) = \frac{1}{m} \displaystyle\sum^m_{i = 1}(f(x_i) - y_i)^2 $$
我们要做的就是尽可能找到那组 $w, b$ 使得 $J(w)$ 是最小的:
$$ (w^*, b^*) = argmin_{(w, b)} \frac{1}{m} \displaystyle\sum^m_{i = 1}(y_i - f(x_i))^2 $$
$$ (w^*, b^*) = argmin_{(w, b)} \frac{1}{m} \displaystyle\sum^m_{i = 1}(y_i - w x_i - b)^2 $$
解得 w 和 b
可以看出最小二乘法得到的cost function是一个凸函数,可以看作一元二次方程,目标是求该方程的最小值,即求一元二次方程导数逼近0的点。在不好求导或者数据量很大的时候,我们也可以使用另外一种方法:梯度下降法
一步解法
一元线性回归导数:
$$ \frac{\delta J(x)}{\delta w} = 2(w\displaystyle\sum^m_{i = 1}x_i^2 - \displaystyle\sum^m_{i = 1} (y_i - b)x_i) = 0 $$
$$ \frac{\delta J(x)}{\delta w} = 2(mb - \displaystyle\sum^m_{i = 1} (y_i - w x_i)) = 0 $$
多元线性回归倒数:
比一元线性回归复杂的是,多元线性回归组成的不是直线,是一个多维空间中的超平面,数据点散落在超平面两侧。此时我们要将偏置项 $b$ 放入 $W$ 中并且在 $X$ 中增加一列 value
为 1 的列向量如下:
$$ W = (b, w_1, w_2, ..., w_m) $$
$$ X = \left(\begin{matrix} 1 & x_{11} & x_{12} & \cdots & x_{1m} \\\ 1 & x_{21} & x_{22} & \cdots & x_{2m} \\\ \vdots & \vdots & \vdots & \vdots & \vdots \\\ 1 & x_{1n} & x_{2n} & \cdots & x_{nm} \end{matrix}\right) $$
然后用 $W$ 表示 $(w, b)$,求具体的参数
$$ W^{*} = argmin(y - XW^{*})^{T}(y - XW^{*}) $$
$$ J(w) = \frac{1}{2}(y - XW)^{T}(y - XW) $$
$$ \frac{\delta J(w)}{\delta w} = -X^T y + X^T X W = 0 $$
解得:
$$ W* = (X^TX)^{-1}X^T y $$
问题:
$X^T X$ 在现实任务中往往不是满秩矩阵,所以无法求解矩阵的逆,故无法求得唯一的解,在这个时候我们可以换梯度下降法或者引入正则化,将矩阵补满符合要求。
梯度下降法
非线性的最小二乘可以通过牛顿高斯迭代、LM算法、梯度下降求解
梯度下降:随机初始化 $w$ 和 $b$ ,通过逼近的方式来求解,损失函数:
$$ J(\theta_0, \theta_1) = \frac{1}{2m}\displaystyle\sum^m_{i = 1}(\hat{y} - y)^2 $$
梯度下降优化方法:
$$ \theta_0 := \theta_0 - \alpha \frac{\delta J(\theta_0, \theta_1)}{\delta \theta_0} $$
$$ \theta_1 := \theta_1 - \alpha \frac{\delta J(\theta_0, \theta_1)}{\delta \theta_1} $$
梯度下降形象解释:把损失函数想象成一个山坡,目标是找到山坡最低的点。则随便选一个起点,计算损失函数对于参数矩阵在该点的偏导数,每次往偏导数的反向向走一步,步长通过 α 来控制,直到走到最低点,即导数趋近于0的点为止
缺点:最小点的时候收敛速度变慢,并且对初始点的选择极为敏感
梯度下降有时会陷入局部最优解的问题中,即下山的路上有好多小坑,运气不好掉进坑里,但是由于底部梯度(导数)也为0,故以为找到了山的底部
同时,步长选择的过大或者过小,都会影响模型的计算精度及计算效率