在《setting up development set and test set》这一章中,作者提到了一个很重要的问题。
训练集和测试集分布不一致导致的机器学习模型泛化能力有限:在训练集上表现比较好,但是在不同分布的测试集上表现很糟糕这个话题。
比如作者提到一个例子,猫咪探测器,训练的时候用的从website download的猫咪图片,但是测试的时候用的是通过手机拍照得到的猫咪图片,由于分布不一致,导致实际应用的时候效果很差。
如何解决这个问题呢:
在训练的时候就使用手机拍摄的照片来进行训练,主要用在dev sets(验证集)中。这样可以确保训练集和测试集有相同的分布,这样模型就会有比较好的泛化能力。
如果实在找不到手机拍摄的照片来进行训练,你需要认知到模型可能存在泛化能力不足的问题。
另一个问题是这样的,如果训练集和测试集来自于同一个分布,但是结果依然是在模型在训练集上有非常好的表现,但是在测试机上表现不好。
遇到这个问题的时候,一个非常清晰的思路就是,you have overfit the dev set。在训练集上过拟合了。
遇到这个问题,可能发生了一下事情:
1,过拟合
2.测试集的数据比训练集的数据harder,更难分类,更复杂。
3,测试集不是更harder,而是与训练集的数据不同。在这种情况下,一味的提高训练集的准确率是徒劳的。
It is an important research problem to develop
learning algorithms that are trained on one distribution and generalize well to another. But if
your goal is to make progress on a specific machine learning application rather than make
research progress, I recommend trying to choose dev and test sets that are drawn from the
same distribution. This will make your team more efficient.