16. 清除标注错误的开发/测试集数据
在误差分析的过程中,你可能注意到开发集中有些样本被人为的错误标记(Mislabeled)了。当我在这里提到“Mislabeled”的时候,我的意思是这些图片在被输入到算法之前就已经被人为的贴错了标签。比如,样本$(x,y)$中的标签$y$是错的,有一些不是猫的图片被贴上了猫的标签。如果你怀疑被错误标记的数据很重要,请添加一个错误类别来跟踪被贴错标签的样本。
图片(Image) | 狗(Dog) | 大型猫科动物(Great Cat) | 模糊图像(Blurry) | 贴错标签(Mislabeled) | 备注(Comments) |
---|---|---|---|---|---|
…… | …… | …… | …… | …… | |
98 | √ | 不寻常颜色的斗牛犬 | |||
99 | √ | ||||
100 | √ | 狮子;照片 | |||
占总数百分比 | 8% | 43% | 61% | 6% |
那么是否值得修正开发集中这6%的标记出错的例子呢?请记住,开发集的目的是为了帮助你快速评估你的算法,以便判断是算法A还是算法B更好。如果被贴错标签的开发集数据妨碍了你做出这些判断。那么花时间去纠正这些人为标签错误是值得的。
例如:假设你的分类器新性能如下:
- 开发集的整体准确率——-90%(10%的误差);
- 由于贴错标签导致的错误——-0.6%(占开发集错误的6%);
- 由于其他原因导致的错误——-9.4%(占开发集错误的94%)。
这里,相对于9.4%的错误,由于错误标记导致的0.6%变得并不那么重要例如。在开发集中手动修复标记错误的图像没有什么坏处,但是这样做并不是必须的。因为标记出错导致的错误是总体错误的一小部分而已(0.6%对于10%来说,可以忽略了)。
假设你不断改进猫分类器并达到了以下性能表现:
- 开发集的整体准确率——-98.0%(2.0%的误差);
- 由于贴错标签导致的错误——-0.6%(占开发集错误的30%);
- 由于其他原因导致的错误——-1.4%(占开发集错误的70%)。
上述中,30%的错误是由于错误标记开发集的样本导致的,当测得的那么大一部分的错误都是来自开发集标记出错。这种情况下,就值得去提高开发集中标签的质量了。(0.6%对于2%来说,已然不能被忽略)。
开始时容忍一些错误标记的开发集/测试集样本并不罕见,随着系统的不断优化,错误标记示例的比例随着总的误差降低而增长,当这个比例对于总的误差来说不能被忽略的时候,就不能再继续容忍这些标记错误的样本了。
最后一章解释了如何通过算法改进来改善错误类别,例如狗、大型猫科动物、模糊图像等。在本章,你还可以学到通过改进数据标签来处理“Mislabeled”类别。
无论你使用什么方式来修复开发集标签,请记住同时将这个方法用在测试集上,以便让开发集和测试集继续服从同一分布。将开发集和测试集一起处理可以避免我们在第二章的第六节提到的问题,这个问题就是:当你的团队优化了开发集的性能之后才意识到是根据不同的测试集来判断不同的标准。(两者不同分布)
如果你决定了要提高标签的质量,请考虑仔细检查系统错误分类的示例标签以及正确分类的示例标签。在一个例子中,原始标签和学习算法都可能是错误的。如果你只修复被系统错误分类样例的标签,则会在评估中引入偏差(Bias),如果你有1000个样本大小的开发集,同时你的分类器有98%的准确率,那么检查该算法错误分类的20个样本比检查正确分类的980个样本要容易的多。因为在实践中只检查那些被错误分类的样本要更简单,正因为如此,偏差会蔓延到开发集中去。如果你只对开发产品或者应用程序感兴趣,这点偏差是可以接受的,但是如果你计划在学术论文上使用该结果,或者在需要完全无偏估计测量测试集准确率的时候,就会出现问题。