注:对于最重要的两类回归模型,之前总结了"逻辑回归"模型,这里总结一下"线性回归"模型。
0. 概述
线性回归应该是我们听过次数最多的机器学习算法了。在一般的统计学教科书中,最后都会提到这种方法。因此该算法也算是架起了数理统计与机器学习之间的桥梁。线性回归虽然常见,但是却并不简单。该算法中几乎包含了所有有监督机器学习算法的重要知识点,比如数据的表示、参数的训练、模型的评价、利用正则化防止过拟合等概念。所以说如果掌握了线性回归,可以为后面的学习打下坚实的基础。
1. 线性回归的基本形式
最简单的线性回归就是直接利用一条直线拟合二维平面上的一系列点,目的是利用这条直线概括所有训练集中样本的散布规律或趋势,最终用于新样本点的预测。二维平面上直线方程的一般形式为$y = ax + b$,使用训练集中的数据以某种方式训练该模型后,就可以确定方程中的两个参数$a, b$的最优值。后面如果观察到了新的样本$x^i$,就可以带入上面学习到的公式计算$y$的值了。
在三维空间中,需要学习的是确定一个二维平面的参数;
以此类推,在$n$维空间中,需要学习的是确定一个$n - 1$维的超平面的参数.
之所以称该方法为线性模型,是因为该模型是由所有特征的线性组合构成的,基本形式为:
$$\hat{y} = h_{\theta}(x) = \theta_0 + \theta_1x_1 + \theta_2x_2 + \cdots + \theta_nx_n \quad \cdots \ (1-1)$$
$\hat{y}$表示线性回归模型的预测值(相对于真实观察值);
$n$表示特征的数量;
$x_i$表示第$i$个特征的观察值;
$\theta_j$表示第$j$个参数的值.
如果模型包括$n$个特征,那么就会包括$n + 1$个参数,还包括常数项(还是被称为截距)。
式子(1-1)使用向量化形式可以表示为$h_{\theta} = \theta^T \cdot x$, 在多样本的情况下通常表示为:
$$h_{\theta}(x) = X \cdot \theta \quad \cdots \ (1-2)$$
$X$是$m \cdot (n+1)$的矩阵,其中$m$表示样本的数量;
$\theta$是包含所有参数的列向量,长度为$n + 1$.
式子(1-2)表示所有样本值的矩阵与对应参数向量的乘积,属于矩阵乘法((Matrix multiplication)。
具体可以参考我的另一篇博客【机器学习】一些基本概念及符号系统中的“4. 模型的表示”部分。
2. 线性回归的代价函数
假设现在有了训练数据和模型,那么要怎么开始训练呢?这时候就必须定义一个代价函数,代价函数量化了模型预测值与实际观察值之间的误差大小。有了代价函数就可以评价取当前参数时模型性能的好坏。
在选择一个恰当的代价函数后,整个模型的训练过程就是求代价函数最小值的过程。这个过程并不容易,可能会出现下面两种情况:
得到全局最优解:即代价函数的最小值;
得到局部最优解:由于很多原因我们可能仅仅只能求的代价函数在某个区间内的极小值.
如果代价函数是一个凸函数(convex function),那么从数学上可以保证肯定能求得全局最优解;如果代价函数是非凸函数,就无法从理论上保证最终能得到代价函数的全局最优解(NP-hard问题)。
对于线性回归算法,比较常用的代价函数是均方误差(Mean Square Error, MSE)函数:
$$J(\theta) = MSE(X, h_{\theta}) = \frac{1}{2m}\sum_{i=1}^{m}{(\hat{y}^{(i)} - y^{(i)})^2} = \frac{1}{2m}\sum_{i=1}^{m}{(\theta^T \cdot x^{(i)} - y^{(i)})^2} \quad \cdots \ (2-1)$$
上式表示所有模型的预测值与实际观察值之差的平方和,因此训练集中任何一个实际观察值与模型预测值之间的误差都包含在了这个公式中;
为了求导方便,添加了一个系数$\frac{1}{2}$,实际的MSE的定义中是没有的;
该函数是一个凸函数.
关于代价函数的更多解释,可以参考另一篇博客【机器学习】代价函数(cost function)
2. 利用正规方程求解
先看一下正规方程的定义:
最小二乘法可以将误差方程转化为有确定解的代数方程组(其方程式数目正好等于未知数的个数),从而可求解出这些未知参数。这个有确定解的代数方程组称为最小二乘法估计的正规方程
就像利用“一阶导数等于0的点是极值点”的性质,可以非常容易求出一元二次方程的极值点一样,我们也可以采用代数的方法直接计算式子(2-1)的最小值点。实际上经过计算可以得到:
$$\theta = (X^TX)^(-1)X^Ty$$
也就是说,不用经过训练就可以直接利用上面的公式计算出线性回归模型的最优解。既然有了这么方便的方法,为什么我们还需要其他的训练方法(例如梯度下降)呢?这是因为求一个矩阵的逆运算量非常大,例如求一个$n \cdot n$的矩阵的逆,其计算复杂度为$O(n^3)$。因此,在样本量非常大时利用梯度下降来训练模型所消耗的时间远远小于直接使用正规方程计算结果所消耗的时间。当然,在样本量非常小的情况下,利用该方法还是非常方便的。
3. 利用梯度下降训练模型