你的开发集和测试集应该来自于同一发行版(译)
根据你最大的市场(i)美国(ii)中国 (iii)印度 (iv)其他国家,你讲你的猫应用图片数据分成了四部分。为了得到开发集和测试集,我们可以随机的讲两部分作为开发集,另外两部分作为测试集,对吧?比如美国和印度的数据作为开发集,中国和其他国家的数据作为测试集。
一旦你定义了开发集和测试集,你的团队将专注于提高开发集性能。因此,你的开发集需要能够反映你最想要改进的任务:在所有区域都能表现的很好,而不仅仅是两个区域。
开发集版本和测试集版本不同还会引起第二个问题:有一定几率会发生这种状况:你的团队在开发集上构建了一个运行良好的东西,但是在测试集上却表现的很差劲。我已经遇见过这种结果,让人感到沮丧,并浪费了大量的精力,不要让这种情况发生在你身上。
作为一个例子,假如你的团队开发了一个在开发集上表现良好但是在测试集上表现很差的系统,如果你的开发集数据和测试集数据来自于同一个发行版本,你就会非常清楚的知道哪儿出了问题:你的开发集数据太少了,最好的解决方法是获取更多的测试集数据。
可是如果你的开发集和测试集来自于不同的发行版本,那么你就有好几个不明确的地方,下面几个地方可能出了问题,需要一一排查:
- 你过度使用了开发集(开发集数据太少)
- 测试集数据比开发集数据更难,因此你的算法可能和预期中表现得一样好,但是可能没有进一步改进的空间了。
- 测试集不是更难,而只是和开发集不同。因此在开发集上效果很好的系统在测试集上效果不好。在这种情况下,你改进开发集性能的所有努力都是在浪费精力。
开发机器学习应用本来就是很困难的任务了,开发集和测试集数据来源不一致会带来额外的不确定性:改进开发集的性能是否同时改进了测试集的性能。如果开发集和测试集来源不一致,就很难弄清是什么地方出了问题,也就不能对症下药,对提出的改进建议排个优先级。
如果你正在处理第三方基准问题(benchmark problem), 它们的创造者可能会制定来自于不同发行版的数据作为开发集和测试集。这时候,比起开发集和测试集数据来源于同一个发型版本的基准问题,运气比技术更重要。当然,开发在一个发布版本的数据进行训练而且在另一个发布版本的数据效果也很好的机器学习算法是很重要的研究方向。但是如果你的目标不是进行学术研究,而只是想要改进特定的机器学习应用,我建议使用来自同意发布版本的开发集和测试集。这会让你的团队更有效率。