我在使用TensorFlow进行对象检测
时,发现有大量的误报
。我认为造成这种情况的一个主要原因是过拟合
。但我的疑问是,误报
是如何由过拟合
引起的呢?过拟合发生在模型学习到数据中的复杂模式时,或者简而言之,它导致了对数据的记忆。
如果是记忆数据的话,不是应该显示更多的假阴性吗?因为它只是记住了训练数据
,无法检测到新的情况。那么它如何能够将其他对象分类为已训练的类别呢?这不是违反直觉的吗?
回答:
我能想到的一个原因是训练数据中的异常值:
假设在你的训练数据中,类别A有一些强烈的异常值,这些异常值在某些维度上可能更接近于另一个类别B的领域,那么过拟合就会导致类别边界朝向这个异常值的方向移动。这可能有效地导致大量的误报,因为类别A的移动边界现在部分位于本应属于类别B的区域。
举一个极端的例子,一个过拟合的边界可能会看起来像这样:
在这里,由于过拟合,我们将异常值保留在正类中,但代价是也包含了两个假阴性。一个在两个类别之间的良好泛化边界会将异常值作为假阴性丢弃,但由于没有包含那两个假阳性,整体准确率会更高。
顺便说一下,由于异常值导致的假阳性也可能发生,这就是为什么过拟合通常被认为是不好的原因。