过拟合和欠拟合在日常训练模型中一定会遇见。那么它产生的原因是什么?又该如何解决?面试时又该如何回答?

1 过拟合和欠拟合是什么

img

  • 拟合(Fitting):模型能不能很好的描述某些样本,并且有比较好的泛化能力
  • 过拟合(Overfitting):就是太过贴近于训练数据的特征了,在训练集上表现非常优秀,近乎完美的预测/区分了所有的数据,但是在新的测试集上却表现平平,不具泛化性,拿到新样本后没有办法去准确的判断
  • 欠拟合(UnderFitting):测试样本的特性没有学到,或者是模型过于简单无法拟合或区分样本

2 过拟合

2.1 过拟合的表现

当模型在测试集上的损失函数值出现先下降后上升,那么此时可能出现过拟合。

2.2 导致过拟合的原因是什么?

  1. 训练集数量不足,样本类型单一。例如:如果我们用只包含负样本的训练集训练模型,然后用训练好的模型预测验证集中的正样本时,模型就会在训练时效果特别好,但是在验证时表现很差。因此,在选取训练集尽可能的覆盖所有数据类型。
  2. 训练集中存在噪声。使得机器将噪声认为是特征,从而忽略了样本的正确特征信息。
  3. 模型复杂度过高。当模型过于复杂时,会导致模型过于充分的学习到训练数据集中特征信息,将数据“死记硬背”了下来,遇到没见过的数据不能够变通,泛化能力太差。

2.3 过拟合的解决方法是什么?

  1. 尽可能的保证数据分布均匀,有条件的话可以增加数据量。
  2. 分析噪声数据,对数据进行清洗。
  3. 降低模型的复杂度,减少参数、使模型变的简单。
  4. 在训练过程中使用正则化技术,如Dropout、L1、L2正则化等。
  5. 交叉验证,将数据切分组合为不同的训练集和测试集,使模型得到充分的训练。
  6. Early stopping,在模型迭代训练时候记录训练损失值。当训练误差一直在降低但是验证误差却不再降低甚至上升,这时候便可以结束模型训练了。

3 欠拟合

3.1 过拟合的表现

模型无法很好的拟合数据,导致训练集和测试集效果都不佳。

3.2 导致欠拟合的原因是什么?

  1. 数据特征表达能力不强或者现有特征与标签之间的相关性不强。
  2. 模型太简单,导致无论怎么学习都无法学到有效的信息,即模型“先天不足”。
  3. 模型合适,但是没有训练好,即模型还没有训练到收敛的情况。

3.3 欠拟合的解决方法是什么?

  1. 特征工程。对数据维度进行筛选,选取特征与标签之间关联性强的维度进行建模,同时可去除噪声数据。
  2. 增加模型复杂度。
  3. 增加模型训练时间,直到模型收敛为止。
  4. 减小正则化系数。

参考资料