在前面的学习中,我们一直使用的线性回归算法是梯度下降法,即为了最小化代价函数,我们需要通过迭代很多步来收敛到全局最小值。那么现在我们来学习一种新的解法来求解。即正规方程。正规方程提供了一种求的解析解法,相比较迭代算法,我们可以直接一次性的求解出的最优值。
我们首先举一个例子来帮助理解正规方程,我们假设有一个非常简单的代价函数,它就是一个实数的函数:。所以现在假设数只是一个标量,或者说数只有一行,是一个数字不是向量。假设我们的代价函数J是这个实参数数的二次函数,那么如何最小化一个二次函数呢。很常见的办法就是对函数求导,并导数为0,即求解,这样就可以求得使得最小时的值。但实际情况中,我们的数往往不是一个实数,而是一个n+1维的向量,并且代价函数J是这个向量的函数,也就是:。那么如何最小化这个函数呢,微积分里我们学过偏导,即这里我们要对每个参数求J的偏导数,但这个求导会非常复杂,因此实际上并不会真的对这个函数进行遍历所有的偏微分,这里只是告诉大家想要实现这个过程所需要知道的内容。
现在我们看看之前用过的房价的例子,数据集大小m=4,我们在额外的加上一列对应特征向量,这一列取值永远为1:
接下来我们就可以构建一个矩阵X,这个矩阵包含了训练样本的所有特征变量,X是个m(n+1)维矩阵。对y,也就是我们预测的值,可以构建一个向量,y是个m维度的向量.m是训练样本数量, n是特征变量数:
如果我们用矩阵X和向量Y来计算的话,那么最终的结果如下等式:
假设我们有m个训练样本直到,特征变量数目为n,因此每个训练样本可以看作一个向量:
接下来我们要构建矩阵X,构建矩阵X的方法也被称作设计矩阵。每个训练样本给出一个这样的特征向量,取第一个训练样本,也就是一个向量,取它的转置,最后是扁长的样子。让作为我设计矩阵的第一行 然后第二个训练样本进行转置 让它作为X的第二行。以此类推,直到最后一个训练样本取它的转置作为矩阵X的最后一行,这样矩阵 X 就是一个 m(n+1) 维矩阵:
举个例子,假设我们只有一个特征变量,就是说除了之外只有一个特征变量,而始终为1,所以如果我的特征向量等于1,也就是和某个实际的特征变量等于1,
那么按照上述的方法,设计矩阵就是这样:
这样,就会是一个m*2维矩阵,而这里的向量y,则是一个m维向量:
这样我们得到了矩阵X和向量Y的结果,因此就可以使用正规方程来求解了。
之前我们在梯度下降的时候说过特征变量的特征缩放,即将所有的特征值缩小到类似的范围内。而如果使用正规方程的话,就不需要再进行特征缩放的操作了,但如果使用梯度下降法,就要根据不同特征的范围来判断是否需要使用特征缩放。
特征方程看起来相对于梯度下降要简单很多,但也不是万能的,这里我们列出这两个的特点来进行对比一下:
(懒得手写了就直接赋值吴恩达老师的图了==),这里就提一下两者的最后一个特点。由于矩阵X是m*(n+1)维的矩阵,当我们的特征值非常多的时候,计算时候的计算量是非常庞大的,因此计算的速度会非常慢,但n的大小很显然跟梯度下降的速度没关系,所以梯度下降算法依然可以正常运行。这里吴恩达老师是建议在n=10000的时候就考虑一下是否要使用梯度下降法了,10000以下都可以使用正规方程,当然这里还是需要通过实际情况来决定。
最后也稍微说一点关于如果矩阵不可逆怎么办。出现这种情况的可能性大概有两种,一种是特征选的很多余了,比如选了房子的平方面积作为特征还选了房子的英尺计算的面积,这样就明显很多余了;还有一种是特征选的太多,比如你有10个样本,结果选了1000个特征,这显然也不适合,可以适当的删除一些特征或者以后会提到的正则化的线代方法。
以上,就是关于正规方程的一些简单介绍,针对吴恩达机器学习的正规方程那一章节。