多元线性回归
之前学习的是简单线性回归问题,也就是我们假设我们的样本只有一个特征值,但是在我们的真实世界中,通常一个样本是有很多特征值的,甚至有成千上万个特征值也不奇怪,那么针对这样的样本,我们依然可以使用线性回归的思路来解决这样的问题,那么通常我们就把这样的问题称为多元线性回归。
下面我依然举出简单线性回归中的图。
在这幅图上,每一个点对应x轴的一个值,相应的,这个值也对应y轴一个输出的标记。
那么,当 x(i) 指一个数字的时候,对应的就是一个简单的线性回归问题,但是如果 x(i) 对应一个向量的话,这种情况下就是一个多元线性回归问题。
那么此时的 y 从简单的 ax+b 就可以写成:
上面的式子说明 x 有多少个特征,y 表达式中 x 前就有多少个 θ,而同样也存在截距:
在简单线性回归中,只有 a 和 b 两个参数,而在多元线性回归中,就存在 n+1 个参数。如果我们可以学习到这 n+1 个参数的话,那么对于我们的一个样本 x(i) ,就有相应的 y 的预测值:
其实这个形式和我们之前学习的简单线性回归是一致的,区别只是我们的特征数从1拓展到了有n个特征,那么其实我们求解问题的思路也和简单线性回归方法是一致的。回顾一下简单线性回归,我们的目标:
那么,对于多元线性回归来说,我们依然是:
因为这个式子表达的就是我们预测的结果和真实的结果之间的差值的平方的和。我们要让这个式子尽可能的小,只不过在多元线性回归中,y 的预测值变成了:
所以,我们在多元线性回归中,我们的目标就变成了:
那么我们仔细来看看 y 的预测值这个式子:
我们可以把该式子中的所有参数整理成一个向量(这里使用列向量,所以后面有一个T(转置运算)):
为了让式子整体每一项形式都是一致的,在 θ0 后面加了一个恒等于1的 X0(i):
此时,我们就可以说 X(i)(行向量,每一行代表一个样本,每一列代表一个特征) 为这样一个向量:
现在我们将 X 和 θ 都表示成了向量的形式。
此时,我们就可以简单的把第 i 行样本的预测值写成它们两者之间的点乘:
然后我们将其推广到整个样本中,我们假设有一个矩阵叫做 Xb,这里的 Xb 需要和原来的 X 矩阵区别开,它与 X 矩阵的区别就在于多了第一列的 1,其它的元素是一样的。
此时,y 的预测值为(Xb 的每一行和 θ 的每一列相乘再相加):
所以 y 的预测值也是一个列向量,它一共有 m 个元素,每一个元素对应的就是原来的 X 中每一个样本经过与 θ 后得到的这样一个预测值。在这里,我们将本来的数值计算推导成了一个矩阵运算的形式。
我们要使得:
而这个式子也可以进一步做向量化的处理,回想一下, 之前我们说过这种平方和的形式可以理解为两个式子的点乘的结果。
这里为什么要将第一个小括号进行一个矩阵的转置呢?因为 y - Xb * θ 得到的是一个 m x 1 的行向量,转置之后成了 1 x m 的列向量,再乘以 m x 1 的行向量,最后得到的就是 1 x 1 的矩阵,即只有一个值。
那么变成矩阵的运算之后,我们怎么使得该矩阵相乘最后的结果尽可能地小呢?其实思路和我们的简单线性回归是一样的,也是使用最小二乘法的思路。换句话说,是对这个 θ 中的每一个变量进行求导让其值等于 0,只不过此时我们是在矩阵上进行运算,那么具体在整个矩阵上求导求极值的这个过程相应的这个数学推导可能会超出我们所学习的线性代数的范围,所以在这里我就不研究式子的具体推导过程了,直接给出 θ 的表达式:
这个式子就被称为是多元线性回归的正规方程解(Normal Equation)。这样的式子看起来非常的好,我们通过监督学习所给的数据可以非常容易的拿到 Xb 和 y,经过这样的计算直接就可以求出 θ 了。但是这个求解是有问题的,问题在于它的时间复杂度相对是比较高的,达到了 O(n^3) 这个级别,但是也有一些优化方案,但是即使是有这些优化方案,时间复杂度也会高达 O(n^2.4),还是会比 O(n^2) 这个级别还要高的。在这里,这个 n 我没有区分它是行数还是列数,在实际应用的时候,不管是你的是数据样本量非常大比如100万个样本,或者你这个样本的特征数非常多比如有100万个特征对应的就是行数特别多或者列数特别多,那么在这种情况下,用这种正规方程解都会出现计算非常慢这样的效率问题,那么这个问题是有解决方案的,而且这个解决方案通常是更常用的求解多元线性回归的一种方法。
不过在这里,多元线性回归是可以非常容易的直接可以用一个数学表达式来解出来这个模型的参数对应的这个值的,那么有这么方便的可以直接得到数学解的这样的机器学习的模型其实是非常少的。那么这样做也有一个优点就是我们不需要对数据做归一化处理,因为我们通过这个数学分析就可以知道我们最后估计出来的这个 θ 无非就是我们原始的数据进行一种数学运算的结果,那在这种运算的过程中其实是不存在量纲的问题的,而我们最终得到的 θ 也只是我们线性方程中每一个 x 前面的系数而已,它没有量纲的问题,所以之前我们学习的 kNN 算法使用之前最好对数据进行归一化处理,但是对于多元线性回归来说,我们没必要进行这一步。
好啦,这篇博客主要介绍了多元线性回归系数的求解方法,下一篇博客将会具体实现多元线性回归以及真正的应用多元线性回归 ~~