过拟合问题

什么是过拟合?

以预测房价为例,只有一个输入特征x,为房屋的大小。

用一条直线,既线性回归去拟合训练集时,假设函数为

h_{\theta }(x)=\theta _{0}+\theta _{1}x

过拟合问题_第1张图片

可以发现假设函数并没有很好的拟合训练集,我们称这种情况为欠拟合(underfit)或者说这个算法具有高偏差(high bias)

用二次函数去拟合训练集时,假设函数为

h_{\theta }(x)=\theta _{0}+\theta _{1}x+\theta _{2}x^{2}

过拟合问题_第2张图片

这时拟合效果很好,说明假设函数刚好合适。

如果用一个多项式函数去拟合数据集时,假设函数为

h_{\theta }(x)=\theta _{0}+\theta _{1}x+\theta _{2}x^{2}+\theta _{3}x^{3}+\theta _{4}x^{4}

过拟合问题_第3张图片

虽然假设函数几乎可以完全拟合训练集,既代价函数等于0,或接近于0。

J(\theta )=\frac{1}{2m}\sum_{i = 1}^{m}\left [ h_{\theta }(x^{(i)})-y^{(i)} \right ]^{2}\approx 0

但因为该假设函数只是千方百计的去满足训练集,所以导致它无法泛化到新的样本中,从而无法预测新的值,在这个例子里就是无法预测出准确的房价,这就叫做过拟合(overfit)或者称该算法具有高方差(high variance),这种情况一般在具有太多输入变量的时候发生。

在预测肿瘤是否为良性的例子中,有两个输入特征x_{1}x_{2},我们用logistic回归去拟合训练集,如下图所示,从左往右依次是欠拟合,合适,过拟合。具体表现为决策边界队训练集的划分程度,过拟合的决策边界可能并不能很好的泛化到新的样本中去。

过拟合问题_第4张图片

如何解决过拟合? 

当特征为一维或者二维的时候,我们可以通过绘制图像制定合适的多项式函数用来拟合训练集,但当特征很多的时候,就很难绘制图像进行可视化,而且过拟合的问题一般发生在特征数量很多但训练集中样本数量又较少的情况下。故有以下两个方法来解决过拟合的问题。

  1. 尽量减少特征的数量(缺点:会舍弃一部分特征,相当于舍弃了一些关于问题的信息,舍弃的特征可能是关于预测目标变量有用的信息)
    1. 人工选取无用或者重复的特征,保留更重要的特征
    2. 模型选择算法,这种算法会自动选择哪些特征应该保留,哪些特征应该舍弃
  2. 正则化
    1. 会保留所有的特征变量,但是会减小量级或改变\theta _{j}的大小
    2. 每个特征变量可能对预测目标变量y都有一定的作用,不必舍弃其中哪个特征。

正则化

1、多项式回归

为了预测房价,特征变量x为房屋面积。用多项式函数去拟合数据集,既假设函数为

h_{\theta }(x)=\theta _{0}+\theta _{1}x+\theta _{2}x^{2}+\theta _{3}x^{3}+\theta _{4}x^{4}

过拟合问题_第5张图片

需要计算代价函数的最小值minJ(\theta ),来确定\theta的值,为了解决过拟合的问题,我们可以在代价函数后加惩罚项,从而来求其的最小值。 

minJ(\theta )=min\frac{1}{2m}\sum_{i = 1}^{m}\left [ h_{\theta }(x^{(i)})-y^{(i)} \right ]^{2}+\lambda\left ( \theta _{3}^{2}+\theta _{4}^{2} \right )

\lambda为一个很大的值。要使该代价函数最小,\theta _{3}\theta _{4}都得接近0,相当于直接去掉三次项和四次项,最后这个假设函数就相当于二次函数。这就是正则化的原理,如果我们的参数值\theta _{0},\theta _{1},\cdots ,\theta _{n}较小,参数较小就意味着我们拥有一个更平滑更简单的假设模型,既假设函数。

因为在得出假设函数之前,我们并不知道该模型是否会过拟合,我们也就不知道该去缩小哪些参数,所以我们就缩小所有的参数,这样若是发生过拟合,那些多余的参数就会接近0,若没有过拟合,则也不会影响求代价函数的最小值。修改代价函数为

J(\theta )=\frac{1}{2m}\left [ \sum_{i = 1}^{m} \left ( h_{\theta }(x^{(i)})-y^{(i)} \right )^{2}+\lambda\sum_{j = 1}^{n}\theta _{j}^{2} \right ]

\lambda\sum_{j = 1}^{n}\theta _{j}^{2}为正则化项,用于缩小每个参数, \lambda为正则化参数,如果正则化参数选的过大,则会导致所有参数都接近0,既

\theta _{0}\approx 0, \ \theta _{1}\approx 0,\ \cdots ,\ \theta _{n}\approx 0

这样会让假设函数变成一条平行于x轴的直线,故也要合适的\lambda值。

对多项式回归有两种方法求代价函数的最小值minJ(\theta ),梯度下降法和正规方程法。

在梯度下降法中,

\theta _{j}:=\theta _{j}-\alpha \cdot \frac{\partial J(\theta)}{\partial \theta _{j}} 

需要对\theta _{j}求偏导,因为加入的正则项的下标是从j=1开始,所以需要单独计算\theta _{0}的偏导数。但是正则项的下标从j = 0开始对最后结果的影响也不大。

\theta _{0}:=\theta _{0}-\alpha \cdot \frac{1}{m}\sum_{i = 1}^{m}\left [ h_{\theta }(x^{(i)})-y^{(i)} \right ]

\theta _{j}:=\theta _{j}-\alpha \cdot \frac{1}{m}\sum_{i = 1}^{m}\left [ h_{\theta }(x^{(i)})-y^{(i)} \right ]\cdot x^{(i)}_{j}-\alpha \cdot \frac{\lambda}{m}\cdot \theta _{j}\\:= \theta _{j}\left ( 1-\alpha \cdot \frac{\lambda}{m} \right )-\alpha \cdot \frac{1}{m}\sum_{i = 1}^{m}\left [ h_{\theta }(x^{(i)})-y^{(i)} \right ]\cdot x^{(i)}_{j}

和原来的梯度下降法相比,\theta _{j}变为\theta _{j}\left ( 1-\alpha \cdot \frac{\lambda}{m} \right ),而

1-\alpha \cdot \frac{\lambda}{m} < 1 

故每次梯度下降都会将\theta _{j}的值缩小一点,从而避免过拟合。

对于正规方程法,在未经过正则化的代价函数中,当\theta =\left ( X^{T}X \right )^{-1}X^{T}y,代价函数J(\theta )取得最小值minJ(\theta ),但是当训练集样本的数量m小于特征变量的数量n,既n>m时,这样会导致特征矩阵X不可逆,还可能会导致过拟合,只需要将

过拟合问题_第6张图片

而矩阵

过拟合问题_第7张图片 

\lambda > 0时一定可逆,将\theta代入加入正则项后的代价函数一定可以得到minJ(\theta )

2、Logistic回归

同理也是将正则项加入Logistic回归的代价函数,使代价函数为

J(\theta )=-\frac{1}{m}\left [ \sum_{i=1}^{m}\left [ y^{(i)}\log (h_{\theta }(x^{(i)}))+(1-y^{(i)})\log(1-h_{\theta }(x^{(i)})) \right ]+\lambda \sum_{j = 1}^{n}\theta _{j}^{2} \right ] 

使用梯度下降法,

\theta _{0}:=\theta _{0}-\alpha \cdot \frac{1}{m}\sum_{i = 1}^{m}\left [ h_{\theta }(x^{(i)})-y^{(i)} \right ]

\theta _{j}:= \theta _{j}-\alpha \cdot \frac{\1}{m}\sum_{i=1}^{m}\left [ \left ( h_{\theta }(x^{(i)})-y^{(i)} \right )x_{j}^{(i)} \right ]-\alpha \frac{\lambda }{m}\cdot \theta _{j}\\:= \theta _{j}\left ( 1-\alpha \cdot \frac{\lambda }{m} \right )-\alpha \cdot \frac{\1}{m}\sum_{i=1}^{m}\left [ \left ( h_{\theta }(x^{(i)})-y^{(i)} \right )x_{j}^{(i)} \right ] 

缩小\theta _{j}的值,从而避免过拟合。

或者使用比梯度下降法更高级的算法,但代价函数依然需要加入正则项\lambda\sum_{j = 1}^{n}\theta _{j}^{2}

 

你可能感兴趣的:(机器学习)