Chapter 17、If you have a large dev set, split it into two subsets, only one of which you look at
如果你有一个大的开发集,将其分成两个子集,只着眼于其中的一个
假设你有一个含有5000个样本的大开发集,其中有20%的错误率。这样,算法将对约1000个开发图片进行错误分类。手动检查1000张图片会花费很长时间,所以我们可能决定在错误分析中不使用所有图片。
在这种情况下,我会明确地将开发集分成两个子集,只看其中一个,另一个不看。你将会很快的过拟合手动查看的那部分。你可以使用未手动查看的部分来调参。
继续上面的例子,在该例子中算法将错误分类5000个开发集样本中的1000个。假设我们想手动检查约100个错误样本(错误样本的10%)进行分析。你应该随机选择10%的开发集,并将其放入我们称之为 Eyeball 开发集(Eyeball dev set)中,以提醒我们自己,我们正在用眼睛看它。(对于语音识别项目,你可以在其中听音频剪辑,或许可以将数据集称为 Ear dev set)。因此,Eyeball 开发集有500个样本,其中我们预计算法会错误分类约100个。
开发集的第二个子集叫做 Blackbox 开发集(Blackbox dev set),它将拥有剩余的4500个样本。你可以使用 Blackbox 开发集,通过测量它们的错误率来自动评估分类器。也可以使用它来选择算法或调超参。但是,你应该避免用眼睛去看它。我们使用术语“Blackbox”是因为我们只使用数据集的子集来获得分类器的“Blackbox”评估。
为什么我们将开发集明确分为 Eyeball 开发集和 Blackbox 开发集呢?既然你会获得 Eyeball 开发集中样本的直观认识,你就会开始更快的过拟合 Eyeball 开发集。如果你发现 Eyeball 开发集比 Blackbox 开发集性能提升的更快,你已经过拟合 Eyeball 开发集了。这种情况下,你可能需要丢弃它并找一个新的 Eyeball 开发集,可以通过将更多 Blackbox 开发集中的样本移到 Eyeball 开发集中,也可以通过获取新的标注数据来获得。
将开发集明确地分为 Eyeball 和 Blackbox 可以让你知道何时手动误差分析过程开始导致过拟合数据的 Eyeball 部分。