如何分析数据不匹配

在上一篇文章中,我们介绍了为了扩大数据量,我们使用了不同分布的数据。( )

为了瞄准我们的目标,在划分训练集、开发集、测试集的时候,我们并没有保证它们处于同一分布中,所以在分析偏差和方差的时候需要一些新的技巧。

本篇文章主要介绍,当训练集、开发集、测试集不是位于同一分布时,如何来通过分析偏差和方差确定我们的优化方向。本篇文章的主要内容来自deeplearning.ai视频教程。

问题

如何分析数据不匹配

在训练集和开发集上分析猫分类器的偏差和方差时,我们发现训练集上的误差为1%,开发集上的误差为10%,当训练集和开发集处于同一分布时我们很轻易的就可以下决定说,模型的方差过大,接下来的优化目标就是减少模型的方差。

那当训练集和开发集处于不同分布时,这个结果表示怎么什么呢?还是说明模型的方差过大吗?答案是不一定。

为什么这么说呢,导致这个问题的发生可能有两个原因:

第一,有可能训练集上的图片都是比较清晰的,容易分辨。而开发集上的图片很模糊,都是比较难以识别的,所以才导致开发集的误差比训练集的误差要高出不少。

第二,因为模型只在训练集上训练过,也就是说模型只见过符合训练集数据分布的数据,而没有见过开发集数据那样的数据分布,从而导致在开发集上的误差偏高,这也就是方差问题。

那么我们应该如何来分析这两个问题呢?

训练-开发集

从上面两个原因来看,导致我们无法准确下结论的原因在于训练集与开发集不属于同一分布,那么如果能保证训练集和开发集属于同一分布是不是就能解决这个问题呢?所以,我们通过引入一个新的数据集训练-开发集来解决这个问题。

训练-开发集是指从打乱训练集的数据中随机选择一部分数据作为训练-开发集,这部分数据不参与反向传播,也就是训练。所以,现在整个数据集就分为训练集、训练-开发集、开发集、测试集。训练集与训练-开发集属于同一分布,而训练集与开发集和测试集还是属于不同分布。

分析方法

如何分析数据不匹配

在之前的文章中,介绍过了如何通过人类水平误差、训练集误差、开发集误差、测试集误差来分析偏差和方差问题,从而使用合适的方法来优化算法。这里我们引入了训练-开发集误差之后,应该如何分析呢?分析方法大致不变,主要从下面几个角度分析:

  • 可避免偏差:是指训练误差(7%)与人类水平误差(4%)之间的差值,可避免偏差反应了算法在训练集上的拟合程度。
  • 方差:因为训练集与开发集处于不同分布,所以在计算方差的时候需要注意,应该使用训练-开发集误差(10%)减去训练集误差(7%)来代表方差,方差反应了算法的泛化能力。
  • 数据不匹配问题:训练-开发集与开发集处于不同分布,通过计算训练-开发集误差(10%)与开发集误差(12%)之间的差值,反应了算法的数据不匹配问题。
  • 开发集的过拟合程度:开发集与测试集处于同一分布,计算开发集误差(12%)与测试集误差(12%)之间的差值,可以衡量算法对于开发集的过拟合程度。

总结

通过计算发现,偏差=方差>数据不匹配>开发集过拟合,通过计算上面四个指标的值可以决定我们优化目标的先后顺序。之前介绍过,如何处于算法的偏差和方差问题,对于算法在开发集上发生过拟合可以考虑增大开发集的数据量,关于如何处理数据不匹配问题,我们将在下一篇文章中讨论。


最近开通了微信公众号,在微信公众号上,分享了一些资料,搜索"Python机器学习之路"关注我即可获取,有什么问题欢迎咨询,大家一起学习相互提高。


分享到:


相關文章: