《Machine Learning Yearning》第17章

这一章主要讲了,可以将开发集分成两个部分,一部分通过观察内部的样本做错误分析,另一部分拿来调参。

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的开发集中,提醒我们自己要用眼睛去查找。(对于一个语音识别的项目,你应该会听音频剪辑,或许你会称之为Ear开发集)。因此Eyeball开发集有500个样本,我们希望我们的算法能错分大约100个。

 开发集的第二个子集,称为BlackBox开发集,包含了剩余的4500个样本。你可以通过使用Blackbox开发集计算错误率来自动地评估分类。你也可以使用它来选择算法或者调参。然而,你应该避免用眼睛去查看它们。我们使用“Blackbox”是因为我们只能用这部分数据去评估分类器。
这里写图片描述

 为什么我们要明确地将开发集分成Eyeball和Blackball呢?因为你将从Eyeball的样本中获得灵感,然后更快地过拟合Eyeball。如果你发现Eyeball性能提升远远超过Blackbox,那么你过拟合了Eyeball。在这种情况下,你可能需要丢弃它,然后通过从Blackbox移动一些样本到Eyeball或者获取新的标记数据来得到新的Eyeball。

 明确将你的开发集划分成Eyeball和Blackbox,能告诉你什么时候你的手动错误分析过程导致算法过拟合了Eyeball这部分数据。

猜你喜欢

转载自blog.csdn.net/lisa_ren_123/article/details/81147661