正则化
为什么要正则化
观察上图三个拟合曲线,我们可以得知:曲线一没有很好地分类;曲线三分类过于严格,以至于曲线过于复杂;曲线二是比较合适的分类曲线。
对两种特殊情况定义:图一是“欠拟合”(underfit),图三是“过拟合”(overfit)。一般来说,我们加大特征向量( heta)的维度,可以避免欠拟合的情况。但( heta)的维度多少才合适是一个问题?如果维度过高,就会造成图三的情况,这时候正则化就是一种比较有效的自适应方式。
正则化的思路
正则化的思路就是:想办法将多余的特征向量( heta)权值降低,以致十分趋近零;这时候我们几乎可以忽略这些多余的特征向量,也就达到了降低维度的目的。
思路很简单,可以参考上图进一步理解。简单来说,就是在(J=Cost(h( heta))),即代价函数中给部分多余的( heta)加上权值很高的惩罚项,那么随着代价值最小化,多余( heta)的自身权值也会逐渐降低。具体的算法在下面。
因为我们很难直观上判断哪一个特征向量是多余的,所以每一个( heta)都要进行“惩罚”。其中,(lambdasum_{j=1}^n heta_j^2)叫做正则化项,(lambda)叫做正则化参数。正则化参数如何选择,会在后面的课程中讲到。
用正则化改进所学算法
下面举两个例子,看看正则化改进之后如何。
正则化线性回归
对于线性回归的梯度下降算法:
记住,梯度下降算法是同步更新的。公式如下:
对于正规方程,正则化不仅可以优化特征维度,还可以将原本不可逆的方程转化成可逆方程,如下。简单地理解就是,正规方程之所以不可逆,就是特征维度与数据维度不一致,优化特征维度后使之趋同,就转化成可逆的了。
正则化对率回归
对率回归暂时没学到正规方程,只有梯度下降算法。梯度下降算法形式上与线性回归的一致,只是(h( heta)=frac{1}{1+e^{- heta T x}})。另外的,两者的代价函数形式也是不同的。
NG还给了正则化后的高级优化方法,只需要在计算jVal时在后面加上一个正则化项以及在梯度后面减去一个(frac{lambda}{m} heta_j)即可。如下:
jVal是代价函数的值,使用fminunc(@costFunction)可以最小化代价函数。gradient是Cost的导数,gradient(1)找的是Cost的常数项,没有正则化项。