清洗误标注的开发集和测试集样本

在进行误差分析时,你可能会注意到一些开发集的样本被误标注(mislabeled )了。此处的“误标注”指的是图像在使用算法处理前,已经被负责标注的人员进行了错误的标注,也就是说,某个样本 清洗误标注的开发集和测试集样本 - 图1 的分类标签(label)清洗误标注的开发集和测试集样本 - 图2 的值并不正确。例如,一些不是猫的图片被误标注为猫,反之亦然。如果你不确定这些被误标注的图片是否起着关键作用,可以添加一个类别来跟踪记录误标注样本的比例:

图像大猫模糊误标注备注
89 标注者忽略了背景中的猫
99
100 猫的画像;非真猫
占全体比例8%43%61%6%

那么这个时候,需要修正开发集中的标签吗?回忆一下当初设立开发集的目标——帮助你快速评估算法性能,从而判断算法 A 和 B 哪一个更好。如果开发集中误标注的部分的确影响了你的判断,那么花时间去修正这些标签就是值得的。

举个例子,假设你的分类器表现如下:

  • 开发集整体精度…………….. 90% (10% 整体误差)
  • 误标注样本造成的误差…… 0.6% (6% 开发集误差)
  • 其它原因造成的误差………. 9.4% (94% 开发集误差)

相对于你正在改进的 9.4% 误差,误标记的 0.6% 误差看起来就不那么重要了。在开发集中手动修正误标注样本不会带来不好的影响,但这样的做法并不是必要的:当你不知道整个系统的误差是 10% 还是 9.4% 时,这样处理会看起来不错。

假设你不断地改进猫分类器,并达到了以下性能:

  • 开发集整体精度…………….. 98.0% (2.0% 整体误差)
  • 误标注样本造成的误差…… 0.6% (30% 开发集误差)
  • 其它原因造成的误差………. 1.4% (70% 开发集误差)

此时 30% 的开发集误差是由误标注样本造成的,这对精度估计造成了显著的影响。此时就应该考虑改进开发集样本中的标签质量。处理这些误标注的样本将帮助你找出分类器的误差是接近 1.4% 还是 2.0% ,差异显著。

在项目初始阶段容许一些误标注的开发集/测试集样本并不罕见,你可以选择在系统改进到一定程度时再来考虑被误标注的样本,因为这些误差在整体误差中的占比会逐渐增大。

上一章中解释了如何通过算法改进类似于狗、大猫和模糊图片的误差类别,而在本章你学习了如何通过修正数据的标签来处理误标注的样本。

不论你使用什么方式修正开发集标签,请记住,要将同样的方式应用于你的测试集,这可以保持二者服从相同的分布。我们在第 6 章中已经讨论过了这样操作的意义,在那个问题中,团队成员花费了很多时间优化开发集,直到后来才意识到他们正在根据不同的测试集以不同的标准进行判断。

如果你决定改进标签质量,请仔细检查系统中被误分类和正确分类的样本的标签。对于某个样本,可能原始标注和算法预测的标签都是错误的。如果你仅修复系统误分类的样本标签,则有可能在评估中引入偏差。假设你有 1000 个开发集样本,同时分类准确率为 98%,那么检查 20 个误分类的样本会比检查 980 个正确分类的样本要容易得多。由于在实际操作中,检查误分类样本较为容易,这就导致了开发集会衍生出一定的偏差。如果你只对开发产品和应用感兴趣,如此程度的偏差是可以接受的。但如果你计划在学术论文中引用此结果,可能就需要完全无偏地度量测试集的精度,此时这样做就会出现问题。