《Machine Learning Yearning》第6章

第六章主要内容:

1.开发集和测试集要保持同一分布的重要性。
2.如果开发集表现好,测试集表现不好,可能由什么原因导致。
3.要保证模型的泛化性是很难的一个问题,可能运气成分居多。

六 . Your dev and test sets should come from the same distribution

这里写图片描述

 你把你app的猫图像分为了四个大市场区域(i)美国,(ii)中国,(iii)印度,(iv)其他。我们把美国和印度的部分放到开发集里面,中国和其他的放在测试集里面。换句话说,我们可以随机分配四部分中的两个到开发集,其他两部分到测试集里面,对吗?

 一旦你定义好了开发集和测试集,你的团队将致力于提高开发集的性能。因此,开发集应该反映你想最大限度改进的任务:在所有的四个区域都能做得很好,而不仅仅只是其中的两部分

 还有第二个问题,开发集和测试集属于不同的分布:有可能你的团队在开发集上处理得很好,但是测试集的效果不好。我认为这样的结果令人很沮丧同时很浪费精力,我不希望这种情况出现在你的身上。

 例如,假设你的团队开发了一个在开发集运行地很好但在测试集不好的系统。如果你的开发集和测试集来自同一分布,那么你非常清楚出了什么问题:开发集过拟合了,很显然的解决方法是获得更多的开发集数据。

 但是如果开发集和测试集来自不同的分布,那么你的判断就不是很清晰,有下面几个原因可能出现问题:

  1. 开发集过拟合。
  2. 测试集比开发集更难,所以你的算法可能已经做得足够好了,没有太大的可能有显著改进。
  3. 测试集不一定比开发集难,只是不同于开发集。所以不管在开发集上运行地多好,在测试集上也不会很好。在这个例子中,你在开发集上做的大部分工作可能都浪费了。

 做机器学习应用已经很难了。开发集和测试集不匹配会导致提升了开发集的性能是否也能提升测试集的性能的不确定性。由于开发集和测试集不匹配,很难弄清楚什么有效什么无效。因此很难决定先做什么。

 如果你正在做第三方基准测试问题,他们的创建者可能已经指定了开发集和测试集来自不同的分布。相比较开发集和测试集来自同一分布而言,运气而非技能会对你在这个基准测试的性能产生更大的影响。能在一个分布上训练并在其他上面也能泛化得很好,开发这样的学习算法是一个重要的研究问题。但是如果你的目标是在特定的机器学习应用上取得进展,而不是进行研究过程,我建议你试着让开发集和测试集来自同一分布。这将使你的团队更有效率。

猜你喜欢

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