Overfitting vs. Underfitting (过拟合与欠拟合)

过拟合 vs. 欠拟合

欠拟合(underfitting)通常是由于学习器的学习能力不足,过拟合(overfitting)通常是由于学习能力过于强大。两者都会影响模型的泛化能力,但是解决这两个问题的方法迥然不同。
判断欠拟合或过拟合最简单直接的方法是画出学习曲线(learning curve)。过拟合的表现是: 训练误差很低(甚至为0),而测试误差很高,两者有很大的差距。而欠拟合的表现是: 训练误差和测试误差很接近,但都很高,下图是两个例子。
overfitting and underfitting

过拟合

首先,什么是过拟合?

过拟合(overfitting)是在模型参数拟合过程中的问题,由于训练数据包含抽样误差,训练时,复杂的模型将抽样误差也考虑在内,将抽样误差也进行了很好的拟合。一味追求提高对训练数据的预测能力,所得到模型的复杂度往往比真实模型要高。

具体表现就是所得到的模型训练误差很低,但是在测试集上表现差,即模型的泛化能力弱。

其次,为什么要解决过拟合?

我们拟合出的模型是要在未知的数据上做预测,过拟合的模型是在训练集上表现好,但是在测试集上表现差。但是现实中我们又无法穷举出所有的情况在训练集中,所以我们要解决过拟合问题。

最后,怎么解决过拟合?

下面列举5种方法解决过拟合问题。

  • 数据集扩增
  • 加入正则化
  • Dropout方法
  • 使用合适的模型
  • 降低模型的复杂度
  1. 数据集扩增

    一般而言,数据集扩增即需要得到更多的符合要求的数据,即和已有的数据是独立同分布的,或者近似独立同分布的。一般有以下方法:

    • 1-1. 从数据源头采集更多数据
    • 1-2. 复制原有数据并加上随机噪声
    • 1-3. 重采样
    • 1-4. 根据当前数据集估计数据分布参数,使用该分布产生更多数据等
    • 1-5. 数据增强包括随机旋转图像,放大图像,添加彩色滤波器等。数据增强适用于训练集上,而不发生在验证/测试集上
  2. 加入正则化

    正则化方法是指在进行目标函数或代价函数优化时,在目标函数或代价函数后面加上一个正则项,在训练的时候限制权值变大,一般有L1正则与L2正则等。

    • 2-1. L1正则,L1正则项会产生稀疏解。
    • 2-2. L2正则,L2正则项会产生比较小的解。
  3. Dropout方法

    这个方法在神经网络里面很常用,也是解决过拟合的一个很高效的方法,该方法是在对网络进行训练时使用的一种技巧(trick)。
    dropout是ImageNet中提出的一种方法,在训练时每次随机忽略隐藏层的一些神经元,同时保持输入层与输出层神经元的个数不变。

  4. 使用合适的模型

    训练早停(early-stopping),是指通过在某点之前停止训练过来限制过拟合。
    early-stopping1

    对于每个神经元而言,其激活函数在不同区间的性能是不同的。
    early-stopping2

    当网络权值较小时,神经元的激活函数工作在线性区,此时神经元的拟合能力较弱(类似线性神经元)。

    所以我们就可以解释为什么限制训练时间(early stopping)有用:因为我们在初始化网络的时候一般都是初始为较小的权值。训练时间越长,部分网络权值可能越大。所以如果我们在合适时间提前停止训练,就可以将网络的能力限制在一定范围内。

  5. 降低模型的复杂度

欠拟合

什么是欠拟合?

欠拟合(underfitting)就是学习器没有很好地学到训练样本的一般性质,不能够很好地拟合数据,所以不论在训练数据还是测试数据中表现都很差。当模型过于简单时会发生欠拟合,由于太少的特征或太多的正则化而导致,这使得从数据集中学习变得不灵活。

如何解决欠拟合?

欠拟合相对过拟合比较容易解决。

  • 添加其他特征项
  • 添加多项式特征
  • 减少正则化参数
  1. 添加其他特征项

    有时候我们模型出现欠拟合的时候是因为特征项不够导致的,可以添加其他特征项来很好地解决。例如,“组合”、“泛化”、“相关性”三类特征是特征添加的重要手段,无论在什么场景,都可以照葫芦画瓢,总会得到意想不到的效果。除上面的特征之外,“上下文特征”、“平台特征”等等,都可以作为特征添加的首选项。

  2. 添加多项式特征

    如果是统计回归模型,我们只需要增加模型的参数就可以了,原来是线性模型,那么现在改为二次模型就行,原来是线性回归,现在改为二次回归即可。
    如果是神经网络模型,我们可以通过增加网络的层数和每一层的神经元数目即可,尤其是增加网络层数的效果更好。

  3. 减少正则化参数

    正则化的目的是用来防止过拟合的,但是现在模型出现了欠拟合,则需要减少正则化参数。

参考文献

[1] Overfitting in Machine Learning: What It Is and How to Prevent It
[2] Deep Learning #3: More on CNNs & Handling Overfitting
[3] 机器学习中用来防止过拟合的方法有哪些?-fly qq的回答-知乎
[4] 当你在应用机器学习时你应该想什么
[5] 欠拟合、过拟合及其解决方法-CSDN