0%

17. 如果你有一个很大的开发集,把它分为两个子集,只着眼于其中一个

假设你有一个含有5000个样本的大型开发集,其中有20%的错误率。这样,算法对约1000个图片进行错误分类。手动检查1000张图片是非常耗费时间的, 所以我们可能决定在错误分析中不使用所有的图片。

在这种情况下, 我会明确的将开发集分为两个子集,只看其中一个子集,另一个不看。你可能会在你查看的那部分数据中过拟合,此时你可以使用那部分未使用的数据来进行调参。

继续上面的例子,在该例子中算法错误分类5000个开发集样本中的1000个。假设我们想手动检查约100个错误样本(错误分类的10%)进行分析。你应该随机选择10%的开发集,并将其放入我们称之为Eyeball开发集(Eyeball dev set)中,以提醒我们正在使用它。(对于语音识别项目,你的数据集为语音,你需要一个一个听它们,你可以将它们称为Ear dev set)。因此,Eyeball开发集有500个样本,其中我们预计算法会错误分类约100个。

开发集的第二个子集叫做Balckbox开发集(Blackbox dev set),它将拥有剩下的4500个样本。你可以使用Blackbox开发集,通过测量它们的错误率来自动评估分类器。也可以使用它来选择算法或调整参数。但是,你应该避免使用它。我们使用“Blackbox”术语是因为我们只使用数据集的子集来获得分类器的“Blackbox”评估。

为什么我们将开发集明确的分为Eyeball开发集和Blackbox开发集呢?如果你使用Eyeball进行开发的话,你的算法可能会过拟合。如果你发现Eyeball开发集比Blackbox开发集性能提升的更快,你已经过拟合Eyeball开发集。在这种情况下,你可能需要一个新的Eyeball开发集,将更多Blackbox开发集中的样本移至Eyeball中。也可以通过获取新的标注数据来获得。

将开发集明确分为Eyeball和Blackbox然后手动误差分析可以让你知道何时在Eyeball上导致过拟合。