在我们拿到一个数据集,高高兴兴准备训练一个模型时,会遇到欠拟合或过拟合的问题,业内也喜欢用偏差和方差这两指标去定义它们,那这些词什么意思呢?有什么方法能避免/解决 欠拟合和过拟合呢?
这其实是非常非常基础的概念,但是其实即使是业内人士很难一下子把它们完全讲明白,并列出全面的解决方法,本文为你最通俗地解答。
先解释一下模型欠拟合和过拟合。假设大家已经知道训练集,验证集,测试集这个概念,不清楚的童鞋可以去康康我之前的博客哦 《无废话的机器学习笔记》
下面两个图(来自吴恩达机器学习课的PPT)解释得其实很清楚。
欠拟合:模型在训练集上没有得到足够好的拟合
过拟合:模型在训练集上得到过分好的拟合。
过分好有什么坏处呢,就比如训练集数据里都是白天的熊猫,模型把白天也作为特征学习了(对训练数据中的每个小细节都进行了学习,包括噪声和异常值),那么给一张黑夜的熊猫图,模型判断这不是熊猫。所以模型在训练集上表现完美,一到测试集就拉胯。(训练集上猛如虎,测试集上很离谱)
下面图的最靠右情况就是过拟合,这时模型往往变得非常复杂(有高次项,如x三次方和四次方)
?
?
偏差和方差数学里就是描述数据的特征嘛,大家觉得这有什么需要解释的,但机器学习里面,我们不是要求出一堆数据的偏差和方差,而是把它们当作一种指标来衡量模型的性能。
很多教程一上来给出这个图来理解偏差/方差,很直观,但其实这图很容易迷惑初学者,比如这里面的蓝点,到底是模型基于训练集还是验证集的预测,还是都有?如果都有,右下角那个图,落在红心附近的蓝点如果是基于训练集,那么这个模型应该是low bias。如果都是训练集,那么是及说明不了方差的,因为方差是衡量模型在不同集的表现波动,所以有点乱,我自己当时也是理解得模模糊糊。也可能是我理解有误,欢迎大家留言指教。
?
我个人理解它们在机器学习里的含义应该是这样:
偏差:训练集/验证集数据(模型预测)与红心(真实结果)的差距。重点在模型对训练集的损失函数。
(偏差衡量模型的预测结果与真实结果之间的差距,即模型的准确性。高偏差意味着模型的预测结果通常偏离正确值)
方差:模型对训练集与测试集的性能差别。重点在模型对训练集和测试集的损失函数之间的差别。若训练集和测试集的损失函数都很大,也叫低方差。
总的来说,方差衡量模型对于给定数据的小波动的敏感度,即模型在训练集和验证集上的表现波动。
?
下面这图将 欠拟合/过拟合 与 偏差/方差 的关系解释得完美。
λ是正则化项,它越大模型越被限制,变得越简单。后面会解释。总得来说,
欠拟合时,高偏差,低方差,模型较简单。(因为模型对于训练集和验证集误差都很大,所以低方差;如果模型在训练集上已经偏差很大,在验证集上更加离谱,偏差更大,那么这时可以说模型是高方差,不过这种情况极少发生。)
过拟合时,低偏差,高方差,模型较复杂。
理想的模型应该在偏差和方差之间找到良好的平衡。这就是所谓的偏差-方差权衡(Bias-Variance Tradeoff),追求偏差和方差都比较低!
下面这图解释得也不错,靠左边就是模型较简单时,模型对于训练集和验证集误差都很大,所以低方差;靠右边就是模型较复杂时,低偏差,高方差。
?
?