6. 开发集和测试集应当服从同一分布

根据你的App的受众地区,将猫咪数据来源分为四个区域:(i)美国、(ii)中国,(iii)印度和(iv)其他。我们提出了一个服从这样分布(Distribution)的开发集和测试集:将美国和印度地区的数据归入开发集中,将来自中国和其他地区的数据归入测试集中。简单说就是,我们随机将两个地区的数据分配给开发集,另外两个分配给测试集。这种分法对吗?

6. 开发集和测试集应当服从同一分布 - 图1

一旦定义好开发集和测试集,你的团队将会专注于提高开发集上的表现。所以,开发集应该要反映出你最想要改进的任务——在四个区域都表现良好,而不是其中的两个。

开发集和测试集服从不同分布导致的第二个问题是:你的团队可能会构建出来在开发集上表现良好的系统,但发现它在测试集中却表现很差,我曾在大量的挫折和错误的努力中得到过这种结果。现在要避免这种悲剧发生在你身上。

还是以例子来说明,假设你的团队构建的系统在开发集上表现良好但是在测试集却很糟糕。如果此时你的开发集和测试集服从同一个分布,那么你将非常清楚的知道哪里出了问题——数据过拟合了。一个有效的办法就是获取更多的开发集数据。

但是,如果开发集和测试集服从不同的分布,那么你的决策就不那么明朗了,以下几个方面都可能是出错的地方:

  1. 你过拟合(Overfit)了开发集;
  2. 测试集的数据比开发集数据要更加复杂,你的算法已经达到了预期的效果并且已经无法进一步改善了;
  3. 测试集的数据并不比开发集数据复杂,只是因为服从不同分布,所以开发集上良好的性能表现并不能泛化到训练集中。在这种情况下,你在开发集上所做的努力就全部白费了。

开发机器学习应用已经足够困难,不匹配的开发集和测试集则引入了额外的不确定性——改进开发集的分布是否能提高测试集表现?这会使得更加难以确定哪些优化措施是有效的哪些是徒劳的,从而难以指定优化措施的优先级顺序。

如果你处理第三方的基准测试,它们的创建者可能指定了来自不同分布的开发集和训练集。与服从同一分布的开发集和训练集相比,对于基准测试的性能表现,运气将会比技巧产生更大的影响。当然,构建能够在一种分布中表现良好而且能泛化到其他分布的学习算法是很重要的研究方向。但是,如果你的目标是构建出能在特定的机器学习应用中取得进展的话,我建议你尝试选择服从同一分布的开发集和测试集,这会使您的团队更有效率。