本文是吴恩达《机器学习》视频笔记第24篇,对应第2周第6个视频。
“Linear Regression with multiple variables——Normal equation”
01
—
笔记
通过前面的好多视频,我们对线性回归方模型、模型参数的求解有了初步认识,我们有好几个视频都是用梯度下降法来求解模型参数最优值的,除此之外呢?还可以用正规方程来求最优参数,本次视频就讲正规方程。
梯度下降法,说白了就是我们是使用迭代的方式逐步把最优参数给试出来的;而正规方程呢,我们使用分析的方法可以一次性快、准、狠的把最优解给找出来。
我们利用初中的数学知识就可以理解一下正规方程法,以前我们学过的抛物线,假设我们的代价函数是:
上图中抛物线方程,如果系数a>0,则开口向上,有一个最小值点。你看,我们可以很快速的把这个最小值点给找出来。
当然,学过微积分后这个事更简单,我们对抛物线函数求一次导,然后让它等于0,就可以求出代价函数位于最低点时的 .
更进一步的,如果我们的参数不是一个简单的实数,而是一个向量呢?即前面我们用梯度下降法求解的问题放到这个地方,就变成了:
那我们只需要对参数向量的每一个分量求偏导,然后让它等于0,得到一个方程组,把这些参数分量都求出来,就可以得到让代价函数取得最小值的参数向量的值。当然了,这个求取偏微分并求解的过程可能会相当之复杂,但我们要知道有这么一个方法。
依然是卖房子的例子:
我们加上 一个全为1的 ,然后要求解的问题就变成了:
这样的话呢,我们就有了因变量y和自变量矩阵x之间的线性模型关系 ,然后有代价函数:
对这个代价函数求各个 的偏导,然后让它等于0. 就可以求得这样一个参数向量:
这个参数向量,就可以让代价函数取最小值。很多文章管这叫最小二乘法。
回顾一下,正规方程法求解最优参数的过程:假设有m组训练样本,每个样本有n个自变量(特征),然后自变量的矩阵变成:
假如我们研究的对象,只有一个特征,那训练集就是:
相对应的,用前面的正规方程法求得的最优参数就是:
把X上面这个式子里一代,就齐活了。
在程序里,求这个是很简单的。以Octave为例,直接就是下面这样一行命令就可以搞定:
命令的前半部分pinv(X'*X), 表示X的转置与X的矩阵乘然后求逆矩阵。
这样一行命令,就可以求出让代价函数最小的参数,是不是很优秀?
相对于梯度下降法,正规方程法无需确定学习率 、无需运行很多次,可以一次命中目标。
但问题是,有时候我们的特征变量特别多的时候(比如上百万)梯度下降法依然可以很好的运行,而正规方程法在计算矩阵乘法、矩阵转置、矩阵的逆的时候就对计算机的算力要求相当高了。
换句话说,当n特别大的时候,就建议使用梯度下降法了。
大和小是比较主观的,什么时候算比较大呢?根据经验,一般在n为万这一量级的时候,就可以考虑使用梯度下降法了。
只要n不是很大,都是建议直接使用正规方程法的。