在学习算法通过训练集学习模型的过程中,可能会发生“过度学习”的情况。比如要训练一个识别树叶的模型,已有的训练集中的树叶都是锯齿状的树叶,如果过度学习这个训练集,最终得出来的模型就会以为树叶必须有锯齿,于是会把没有锯齿的树叶判断为不是树叶。这种问题称为过拟合 overfitting
问题。
那么怎么解决过拟合问题?
有至少两种方法可以缓解这个问题,第一种方法是减少特征的数量,但一般来说特征的减少会造成信息的缺失,导致最终学习出来的模型存在一定的缺陷。
第二种方法就是调整模型的各个参数。考虑到过拟合问题的本质就是我们的模型(也就是函数)的图像几乎百分之百地经过了所有训练集上的数据点,即过度拟合,加上训练集中的样本并不全面,导致我们的学习算法最终学到的函数其实是错误(片面)的。由于函数的图像由各个参数所决定,而过拟合函数的参数过于精确复杂,我们需要做的就是调整这些参数的精确度。怎么调整这些参数?这就需要用到正则化 regularization
的方法。
Regularization
例如对于下图的训练集,左图是正常的拟合结果,而右图则是过拟合的结果(当然右图有可能是一个很好的拟合结果,但为了方便说明概念,这里假定右图是过拟合的结果)。

可以看到右图的曲线所代表的函数比左图复杂很多。使用 regularization 的方法可以缓解过拟合的问题,具体的做法是设置一系列惩罚项
,用来减小一些参数的值,对于上图,则是减小 θ3 和 θ4 的值。在自动调整参数的过程中,通过一些手段,使得 θ3 和 θ4 保持在一个较小的值,具体的方式是通过这样的一个 cost function:
J(θ)=2m1∑i=1m(hθ(x(i))−y(i))2+1000θ32+1000θ42
对于这个式子,为什么能做到将 θ3 和 θ4 控制在 0 左右呢?因为我们的目标是将 cost function 最小化,由于上式在后面加了这么大的两项,为了使总体最小,这就导致了最终 θ3 和 θ4 最后的值会非常小。
通过这个式子,可以将 θ3 和 θ4 的值控制在 0 左右,这使得最后得到的模型几乎是个二次函数。
假如我们的问题有 100 个特征,但不知道具体可以通过减小哪些参数值来缓解过拟合问题,对于这种情况,我们会采取将所有的参数值一并减小的措施来缓解过拟合问题。更一般化的 cost function 如下,其中 n 为特征的个数:
J(θ)=2m1[∑i=1m(hθ(x(i))−y(i))2+λ∑j=1nθj2]
-
λ∑j=1nθj2 称为
regularization term
, λ 称为 regularization parameter
- 注意 j 是从 1 开始的,也就是说 θ0 不会受到影响。
需要注意的是,当 λ 过大时,会导致除 θ0 以外的所有参数的值都在 0 左右,导致最终式子几乎相当于只剩下一个参数 θ0,这会导致欠拟合
,所以 λ 值的选择很重要。那么怎么选择 λ 的值?如何让计算机自动地选择 λ 呢?
补充:

欠拟合
与过拟合相对应,欠拟合 underfitting
的意思是对训练集的拟合程度很差。
Regularized linear regression
使用线性回归模型拟合数据如果发生过拟合问题该如何解决?
加入正则化项后的线性回归模型的 cost function 与之前相同:
J(θ)=2m1[∑i=1m(hθ(x(i))−y(i))2+λ∑j=1nθj2]
现在我们需要找到这个 cost function 的最小值,也就是找到最优的那一组参数,那么就需要梯度下降算法,如下:
Repeat{θ0:=θ0−αm1i=1∑m(hθ(x(i))−y(i))x0(i)θj:=θj−α[m1i=1∑m(hθ(x(i))−y(i))xj(i)+mλθj](j=1 to n)}
上面算法的第二个式子整理一下变成:
θj:=θj(1−αmλ)−αm1∑i=1m(hθ(x(i))−y(i))xj(i)
对于上式,1−αmλ 是一个比 1 略小的数,αm1∑i=1m(hθ(x(i))−y(i))xj(i) 则与没有加入正则项之前的导数项一致。
这个式子所表达的意思是,先让 θj 乘以一个比 1 小的数,也就是先缩小一些,然后再减去与之前(没有加入正则项之前)相同的导数项。
除了使用梯度下降法之外,还可以使用 normal equation,加入正则项后的 normal equation 如下:
#TODO
Regularized logistic regression
使用 logistic 回归来分类样本,如果发生过拟合(如下图)该如何解决?

将 logistic 回归原来的 cost function 改为:
J(θ)=−[m1∑i=1my(i)loghθ(x(i))+(1−y(i))log(1−hθ(x(i)))]+2m1λ∑j=1nθj2
对应的梯度下降算法为:
Repeat{θ0:=θ0−αm1i=1∑m(hθ(x(i))−y(i))x0(i)θj:=θj−α[m1i=1∑m(hθ(x(i))−y(i))xj(i)+mλθj](j=1 to n)}
其中假设函数为:hθ(x)=1+e−θTX1