Computing Parameters Analytically
1、Normal Equation:对于某些线性回归问题,用正规方程法求解参数 θ 的最优值更好。
具体而言,到目前为止,我们一直在使用的线性回归的算法,是梯度下降法。就是说,为了最小化代价函数 J(θ) 来最小化这个,我们使用的迭代算法,需要经过很多步来收敛到全局最小值。
相反地,正规方程法提供了一种求 θ 的解析解法,可以直接一次性求解θ的最优值。
对这个算法有一个直观的理解:
举一个例子来解释这个问题
我们假设有一个非常简单的代价函数 J(θ) ,它就是一个实数 θ的函数,所以现在,假设 θ 只是一个标量,或者说 θ 只有一行。它是一个数字,不是向量,假设我们的代价函数 J 是这个实参数 θ 的二次函数,所以 J(θ) 看起来是这样的。
那么如何最小化一个二次函数呢? ??
最小化的一个函数的方法是,对它求导,并且将导数置零,就可以求得 使得 J(θ) 最小的 θ 值。
这是数据为实数的 一个比较简单的例子,那么,我们新起一个问题,在这个问题中,我们感兴趣的是 θ不是一个实数的情况,它是一个n+1维的参数向量,并且,代价函数 J 是这个向量的函数,也就是 θ0 到 θm 的函数,一个代价函数看起来是这样,像右边的这个平方代价函数,我们如何最小化这个代价函数J ? ??
实际上,微积分告诉我们一种方法,对每个参数 θ 求 J 的偏导数,然后把它们全部置零。这样做,并且求出θ0...θ1,一直到θn的值。这样就能得到能够最小化代价函数J的θ值 。但是,如果你真的做完微积分和求解参数 θ0 到 θn,这个计算过程很复杂!
为了实现正规方程法,我要这样做,在这里就是这四个训练样本,在这种情况下 ,我们假设,这四个训练样本就是我的所有数据,我所要做的是,在我的训练集中加上一列对应额外特征变量的x0,就是那个取值永远是1的,接下来我要做的是,构建一个矩阵 X ,这个矩阵基本包含了训练样本的所有特征变量,所以具体地说,这里有我所有的特征变量,我们要把这些数字全部放到矩阵中 X 中。对我们将要预测的值,构建一个向量 ,称之为向量 y。 最后,使用矩阵 X 和向量 y 来计算这个 θ ,等于 X 转置乘以 X 的逆,乘以 X 转置,乘以 y。这样就得到能够使得代价函数最小化的 θ。
如果你使用正规方程法,那么就不需要归一化特征变量。
总结一下,只要特征变量的数目并不大,正规方程是一个很好的计算参数 θ 的替代方法,具体地说,只要特征变量数量小于一万,我通常使用正规方程法。
但是,随着我们要讲的学习算法越来越复杂,例如,当我们讲到分类算法,像逻辑回归算法,我们会看到,实际上对于那些算法,并不能使用正规方程法。对于那些更复杂的学习算法,我们将不得不仍然使用梯度下降法,因此,梯度下降法是一个非常有用的算法,可以用在有大量特征变量的线性回归问题。
但对于这个特定的线性回归模型,正规方程法是一个比梯度下降法更快的替代算法。
2、Normal Equation Noninvertibility(正规方程的不可逆性)
特征间存在线性相关。
特征数量过多,远多于数据集数。(在线性方程中表现为未知数个数大于方程个数。)
(In this case, delete some features or use "regularization" (to be explained in a later lesson).)
(When implementing the normal equation in octave we want to use the 'pinv' function rather than 'inv.' The 'pinv' function will give you a value of θ even if XTX is not invertible.)