1.5 过拟合和欠拟合 |
|
无论在机器学习还是深度学习建模当中都可能会遇到两种最常见结果,一种叫过拟合(Over-fitting);另一种叫欠拟合(Under-fitting)。
所谓过拟合(Over-fitting)其实就是所建的机器学习模型或者是深度学习模型在训练样本中表现得过于优越,导致在验证数据集以及测试数据集中表现不佳。过拟合就是学到了很多没必要的特征,比如长得像猫的狗,或者长得像狗的猫,其实这只是特例,但神经网络为了更好地降低损失(Loss),就只能被迫学习这些特征用来区分猫和狗。但是学习得太过了。举个例子:一个男人穿着蓝色的衣服,神经网络可能把是否穿蓝色衣服作为区分男人女人的特征,这就是过拟合。遇到了新样本,这些错误的特征就没有什么用了。所以过拟合就是表现为训练的时候效果很好(因为神经网络已经学到了很多有用没用的特征),但是在测试样本上的效果就很差(有的特征完全没用)。一般来说,如果训练数据集过小,特别是比模型参数数量更小时,过拟合更容易发生。
降低“过拟合”的方法如下:
(1)增加训练数据。举个例子,投硬币问题,如果你碰巧投了10次都是正面,那么你根据这个数据学习,是无法揭示真实规律的,根据统计学的大数定律(通俗地说,这个定理就是,在试验不变的条件下,重复试验多次,随机事件的频率近似于它的概率),当样本多了,这个真实规律是必然出现的。使用更多的训练数据是解决过拟合的最有效手段,因为更多的数据能让模型学习到更多的有效特征,减小噪声的影响。当然,直接增加实验数据一般是困难的,但是可以通过一定的规则来扩充训练数据。比如,在图像分类的问题上,可以通过图像的平移、旋转、缩放等方法来扩充数据;更进一步,可以使用生成式对抗网络(GAN)来合成大量的新数据。
(2)降低模型复杂度。在数据较少时,模型过于复杂是产生过拟合的主要因素,适当降低模型复杂度可以避免模型拟合过多的采样噪声。例如,在神经网络模型中减少网络层数、神经元个数等;在决策树模型中降低树的深度、进行剪枝等。
(3)正则化的方法。给模型的参数加上一定的正则约束。比如将权值的大小加入到损失函数中(损失函数用来评价模型的预测值和真实值不一样的程度。通常情况下,损失函数越好,模型的性能越好)。
所谓欠拟合(Under-fitting)是什么意思呢?相对过拟合,欠拟合还是比较容易理解,可能训练样本被提取的特征比较少,导致训练出来的模型不能很好地匹配,甚至样本本身都无法高效地识别。训练的模型在训练集上表现很差,在验证集上表现也很差,其本质的原因是训练的模型太简单,最通用的特征模型都没有学习到。
降低“欠拟合”的方法:
(1)添加新特征。当特征不足或者现有特征与样本特征标签的相关性不强时,模型容易出现欠拟合。
(2)增加模型复杂度。简单的模型学习能力较差,通过增加模型的复杂度可以使模型拥有更强的拟合能力。例如在线性模型中添加高次项,在网络模型中增加网络层数或神经元个数。