基于你的市场,你将包含猫的图片数据分为四个区域:(i)美国,(ii) 中国,(iii)印度和(iv) 其它。要找到一个开发集和一个测试集,我们可以随机分配两个区域到开发集,另两个到测试集,对吗?比如说美国和印度分配到开发集;中国和其它分配到测试集。
一旦你定义了开发集和测试集,你的团队会关注于提高开发集的表现性能。所以,开发集应该可以反映你希望提高性能的任务:要在所有的四个地区都表现得很好,而不仅仅是两个。
开发集和测试集有不同的分布带来的第二个问题:有可能你的团队建立的算法在开发集上表现得非常好,但是在测试集上表现得很差。我在遭遇很多挫折和浪费很多努力的情景下见过这样的结果。避免这样的事情发生在你身上。
假设你的团队开发的系统在开发集上表现很好,但是在测试集上表现得不好。如果开发集和测试集的分布一致,则你会清楚地知道这是由于过拟合开发集导致的。最显而易见的办法是获取更多的开发集数据。
如果开发集和测试集来自不同的分布,则你的选择就没有那么清楚。可能是由以下几个问题导致的:
- 过拟合开发集;
- 测试集比开发集更难识别。所以你的算法可能已经做得和预期一样很好,也没有可能进一步显著得改进;
- 测试集不一定更难识别,但是和开发集(的分布)不同。所以在开发集表现很好,不一定在测试集上表现很好。在这种情况下,提高开发集性能的工作可能都是一种浪费;
开发机器学习的应用已经很困难了。开发集和测试集之间的不匹配会为提高开发集性能的同时是否可以提高测试集性能带来额外的不确定。这会为找到什么是work的什么是不work带来难度,所以更难以制定选择的优先级顺序。
如果你在第三方benchmark问题上工作,他们的创造者可能已经有指定的来自不同分布的开发集和测试集。与来源于相同分布的开发集和测试集相比,运气而不是技能,在这样的benchmark对性能产生更大的影响。开发在一个分布上训练并能在其它分布上泛化地很好的算法是一个很重要的研究。但是如果你的目标是在特定的机器学习应用上而不是研究上获得进展,我建议选择来源于相同分布的开发集和测试集。这会让你的团队更有效。
网友评论