Chapter 6、Your dev and test sets should come from the same distribution
你的开发集和测试集应该来自相同的分布
根据您最大的市场,将猫应用图片数据分为四个区域:(i)美国,(ii)中国,(iii)印度和(iv)其他。要想出一个开发集和一个测试集,我们可以随机分配这两个区域到开发集,另外两个到测试集,对吧? 比如美国和印度在开发集; 中国和其他在测试集。
一旦定义了开发集和测试集,您的团队将专注于提高开发集的性能。 因此,开发集应该反映你最想提高的任务:在所有四个地区都要做得很好,而不只是两个。 开发集和测试集的不同分布带来的第二个问题:有一个机会,你的团队将构建一些在开发集件上工作得很好,只是发现它在测试集上做得不好。 我曾经在很多失望和白费的努力中看到这个结果。 避免让这些发生在你身上。 例如,假设您的团队开发的系统在开发集上工作的很好,但在测试集上并不如意。 如果你的开发集和测试集合来自相同的分布,那么你会有一个非常明确的诊断哪里出错了:你在开发集上过拟合(overfit)了。显而易见的方法是去获得更多的开发集数据。
但是如果开发集和测试集来自不同的分布,那么你的选择是不清晰的。几方面可能会出错:
1、在开发集上过拟合。
2、测试集比开发集更难。所以你的算法可能做的和预期一样好,因此没有进一步的重大改进的可能了。
3、测试集不一定更难,但只是和开发集不同。所以在开发集上表现很好但并不能在测试集上表现一样。这种情况下,之前很多提高开发集性能的努力可能都白费了。
在机器学习应用程序上工作是很艰难的。具有不匹配的开发和测试集引入了关于是否改进开发集分布也提高测试集性能额外的不确定性。具有不匹配的开发和测试集,使得更难找出什么是有效和无效的努力,因此使得更难以确定工作的优先级。 如果你面临的是第三方基准测试 问题,他们的创建者可能会指定开发集和测试集来自不同的分布。相比开发和测试集来自同一分布,此时运气,而不是技术,将对这样的基准的性能有更大的影响。开发一个在一个分布上训练的很好同时能够很好的推广到另一个分布中的学习算法是一个重要的研究问题。但是如果你的目标是在一个特定的机器学习应用中取得进展,而不是研究进展,我建议尝试选择开发集和测试集从相同的分布。这将使您的团队更有效率。