1 正规方程(Normal Equation)
之前已经说过了求解代价函数J(θ)最小值的方法——梯度下降法,但是梯度下降法需要多次迭代,而且需要不断的尝试来寻求一个合适的学习速率α。其实是还有其他方法来求J(θ)最小值的。
如下所示,对于具体的代价函数J(θ),可以分别对每个参数θi进行求偏导并令其为零,对于含有n个参数的代价函数,会得到n个方程组,联立求解即可求得J(θ)取最小值时的各个参数的值,用线性代数来求解会更快一点。
将上述第二种方法进行整理,就得到了另外一种求解代价函数J(θ)最小值的方法——正规方程法,视频里吴老师只是讲了怎么去应用这种方法,具体的推导过程并没有细说,有兴趣的同学可以看一下参考资料,个人觉得写的还是比较通俗易懂的。
[简单推导:Xθ=y(m个假设函数拍在一起) --> XTXθ=XTy (方阵才可求逆) >>
θ=(XTX)-1XTy (假设XTX可逆) ]
对于下面的例子,我们可以根据正规方程的公式很快求出θ的最终结果,进而求得代价函数J(θ)的最小值,正规方程在Octave/Matlab中实现也是一行语句的是,很简单。
pinv(X'*X)*X'*y
需要注意的一点是:
如果使用正规方程法 那么就不需要归一化特征变量;
如果使用梯度下降法,归一化特征变量就非常重要
两种方法优缺点的比较:
| 梯度下降 | 正规方程 |
|---|---|
| 需要不断尝试选择α | 无需选择α |
| 需要多次迭代,画图辅助判断 | 无需迭代,一次完成 |
| 时间复杂度O(kn2) | 时间复杂度O(n3) |
| n大小并不影响运行效率 | 当n很大(超过1e4)时,运行效率低 |
2 不可逆的正规方程
1中已经讲到了正规方程求解θ的公式θ=(XTX)-1XTy,这个公式其实是默认XTX可逆,那么当它不可逆的时候,我们需要如何来求解θ呢?
很简单,在Octave/Matlab中还是使用之前的pinv函数,pinv是伪逆函数,即使XTX不可逆仍然可以得到θ的一组解;但是inv就是精确的逆函数。
一般情况下,XTX都是可逆的(非奇异),不可逆情况非常少,导致这个矩阵不可逆的原因主要有两个:
冗余特征:也就是训练实例中的某些特征包含的信息很相近,比如预测房价时,特征x1表示平方英尺,x2表示平方米,都是表示面积,两个特征是可以通过公式相互转化的,这种情况被称为线性依赖(linearly dependent),只需要留下其中一个特征表示房屋面积即可。
特征值过多:比如训练实例数m<<特征个数n,试图用10个训练实例去训练100个特征,这很明显不合适,哪有那么多特征可以求。这种情况下,我们下一步需要做的就是在不影响训练过程的前提下,删除某些特征来减少特征的数量,或者是对特征进行进行正则化(regulation)。
3 参考资料
1、机器学习_正规方程(最小二乘法)的推导
2、matlab:inv,pinv逆与伪逆
3、Machine Learning第二讲[多变量线性回归] -(二)计算参数分析
4、机器学习 - Linear Regression with One Variable | Coursera