欠拟合与过拟合
例子-预测房价
如上图所示,通过建立以住房面积为自变量的函数来预测房价,可以对该数据做线性回归。但是可以看出这不是一个很好的模型,对于这些数据来说,很明显,随着房子面积增大,住房价格的变化趋势趋于稳定,或者往右越平缓。因此这个算法没有很好地拟合训练数据。
把这个问题称为欠拟合(under fitting),这个问题的另一个术语叫做高偏差(High bias)。这两种说法大致相似,意思是它只是没有很好地拟合训练数据。
当加入一个二次项,在这组数据中,用二次函数来拟合它。自然,可以拟合出一条曲线,事实也证明这个拟合效果很好。
如果拟合一个四次多项式,因此在这里用五个参数来拟合这五个训练样本,你可以得到看上去像这样的一条曲线。这个模型一方面似乎对训练数据做了一个很好的拟合,因为这条曲线通过了所有的训练实例。但是,这仍然是一条扭曲的曲线。它不停上下波动,因此事实上,并不认为它是一个预测房价的好模型。
这个问题我们把他叫做过度拟合(over fitting),另一个描述该问题的术语是高方差(variance)。
介于高偏差和高方差这两者之间的情况叫做“刚好合适”(图2)。
概括地说,过拟合的问题将会在变量过多的时候发生,这种时候训练出的方程总能很好的拟合训练数据,所以你的代价函数实际上可能非常接近于0,甚至就是0。但是这会导致这种模型无法泛化到新的数据样本中,以至于无法预测新样本价格。
在这里术语“泛化(generalize)”指的是一个假设模型能够应用到新样本的能力,新样本数据指的是:没有出现在训练集中的数据。
类似的问题也存在于逻辑回归之中:
为了解决过度拟合问题,有两种方法:
1. 要尽量减少选取的变量的数量。
具体而言即可以人工检测变量的条目,保留重要的特征,舍弃无用的特征(模型选择算法-可以自动选择哪些变量应该保留)
2.正则化
保留所有的特征变量,但是通过减少参数θj的数量级或值的大小。
这个方法非常有效,当有很多特征变量时,其中每一个变量都能对预测产生一点影响。正如在房价预测的例子中看到的那样,可以有很多特征变量,其中每一个变量都是有用的,因此不希望把它们删掉,这就导致了正则化概念的发生
正则化:
在前面的介绍中,可以看到如果用一个二次函数来拟合这些数据,那么它对数据可以很好的拟合。然而,如果用一个更高次的多项式去拟合,最终可能会得到一个曲线,它能很好地拟合训练集,但却并不是一个好的结果,因为它过度拟合了数据,因此,一般性并不是很好。
让我们考虑下面的假设,我们想要加上惩罚项,从而使参数 θ3 和 θ4 足够的小。这里的意思就是,尽量减少代价函数的均方误差。
现在,如果想最小化这个函数,我们需要尽量减少 θ3 和 θ4 的值。如果我们减少了这两项的值,就像是在上面的式子中忽略了后面的两项:
最终得到一个近似的二次函数,从而达到恰当地拟合数据的表达式。
所以推广到更通用的情况下,这里给出了正规化背后的思路。这种思路就是如果我们的参数值对应一个较小的值的话,那么往往我们会得到一个形式更简单的假设函数。
通常情况下来讲,参数值减少的越多,函数越光滑,因此就不易发生过拟合的问题
具体例子
对于房屋价格预测,我们可能有上百种特征,我们谈到了一些可能的特征,比如说:
x1 是房屋的尺寸
x2 是卧室的数目
x3 是房屋的层数
…
可能有一百个特征。
跟前面的多项式例子不同,我们是不知道 θ3,θ4 是高阶多项式的项,即如果我们有一百个特征,我们是很难提前选出那些关联度更小的特征的。我们不知道如何选择参数来缩小参数的数目。
因此在正规化中,我们要做的事情,就是通过修改我们的代价函数(这里就是线性回归的代价函数)
从而缩小我所有的参数值,修改方式就是在这后面添加一项:
当在最后添加一个额外的正则化项的时候,就收缩了每个参数,并且因此 会使我们所有的参数θ1.θ2.θ3.θ4…θ100的值变小。
顺便说一下,按照惯例来讲,我们是从θ1开始的:
所以我实际上没有去惩罚θ0,在实际情况中,是否包含θ0θ0只会有非常小的差异。
正规化优化的目标:
正规化之后的代价函数如下:
在后面的正规化项中的λ称为正规化参数。
λ要做的就是控制在两个不同的目标中的一个平衡关系:
第一个目标就是:我们想要训练使假设函数更好的拟合训练数据。
第二个目标就是:我们想要保持参数值较小。
参数λ就是用来控制这两者之间的平衡,目标就是平衡拟合训练的目的和保持参数值较小的目的。(即欠拟合和过拟合的平衡)
对于房屋价格预测的例子来说,尽管之前已经用非常高的高阶多项式来拟合,我们将会得到一个非常弯曲和复杂的曲线函数,就像下面这样:
但现在不这样了,你只需要确保使用了正规化目标的方法,那么你就可以得到一个类似于二次函数但并不是真正的二次函数的一条曲线:
这样就得到了对于这个数据来说更好的假设函数。
在正规化线性回归中,如果正规化参数值被设定为非常大,那么会发生什么呢?
将会非常大地惩罚我们的参数,会使得所有的参数接近于0。如果我们这么做,那么就相当于我们从假设函数中去掉了这些项,并且使得我们只是留下了一个简单的假设:
最终得到:hθ(x)=θ0
那就是类似于拟合了一条水平直线:
对于数据来说这就是欠拟合(underfitting)。
换句话说,就是这种假设有过于强烈的“偏见”或者过高的偏差(bais),认为预测的价格只是等于θ0。
因此为了使正则化运作的良好,应该去选择一个不错的正则化参数λ(会有方法来自动选择λ)
线性回归的正则化:
对于线性回归的求解,之前推导了两种学习算法:一种基于梯度下降、一种基于正规方程。现在把它们推广到正则化线性回归中去。
基于梯度下降:
这是推导出的正则化线性回归的优化目标:
前面第一部分是一般线性回归的目标函数,后半部分是正则化项。其中λ是正则化参数。这里是想找到能最小化代价函数的参数θ。
之前,使用梯度下降求解原来没有正则项的代价函数:
我们会反复更新参数θj,其中j=0,1,2,3,…,n。
先把j=0j的情况单独写出来:
这样做的原因是因为上边提到的,对于正则化的线性回归,惩罚参数从θ1开始,不惩罚θ0。所以当修改这个正则化线性回归的算法时,将对θ0有所不同。
具体地说,如果要对这个算法进行修改,并用它求解正则化的目标函数,我们需要做的是把下面的这一项加上正则化项:
如果这样做的话,那么你就有了用于最小化正则化代价函数J(θ)的梯度下降算法。
对于上面式子中第二项:
可以改写为这种形式:
具体来讲,这一项的值:
通常是一个小于1的具体的实数(通常情况下是一个比1小一点点的值),所以我们可以把它想成一个像0.99一样的数字。
所以 θj 更新的结果可以看作是被替换为 θj 的0.99倍(把θj向0压缩了一点点)。
另外后面的这一项:
实际上与原来的梯度下降更新完全一样。
当使用正则化线性回归时,需要做的就是在每一个被正则化的参数θj上乘以了一个比1小一点点的数字,然后,执行跟以前一样的更新。
基于正规方程:
梯度下降只是拟合线性回归模型的两种算法之一,另一种算法是基于正规方程。
我们的做法是建立这个设计矩阵X-X是一个m×(n+1)维矩阵
其中每一行对应于一个单独的训练样本。
然后创建一个m维度的向量y,包含了所有训练集里的标签:
为了最小化代价函数J,可以让θ等于这个式子:(不了解可点击:机器学习之线性回归)
如果使用了正则化,想要得到最小值,那么推导方式如下:
取J关于各个参数的偏导数,并令他们等于0:
然后通过一些数学推导,可以得到这样的式子:
其中正则化矩阵左上角的元素是0,其余对角线元素都是1,剩下的元素也都是0。矩阵的维度是(n+1)×(n+1)。
逻辑回归的正则化:
使用梯度下降: