机器学习防止过拟合这是作弊吗?
Posted
技术标签:
【中文标题】机器学习防止过拟合这是作弊吗?【英文标题】:machine learning preventing overfitting is this cheating? 【发布时间】:2016-09-04 18:17:57 【问题描述】:在训练期间评估训练/测试结果时说这些值:
Train: 50.5% - Test: 50.2%
Train: 55.5% - Test: 53.2%
Train: 62.5% - Test: 58.2%
Train: 69.5% - Test: 62.2%
Train: 75.5% - Test: 59.2% <--- stop training, overfitting seems to be happening.
当这种情况发生时,你能阻止模型训练吗?还是作弊?即当测试准确性降低时停止模型训练。我知道您应该只在训练期间评估训练集,这就是我想知道的原因。
【问题讨论】:
【参考方案1】:这取决于你在做什么。
如果您使用测试准确度来拟合超参数,那么是的,您在作弊。测试数据间接“泄漏”到您的训练数据中,并且您过度拟合。
因此,建议有 3 个数据集:训练、测试和验证数据。
把测试数据锁起来,在你调整模型(训练)之前不要碰它。
尽可能多地使用验证数据来找到最佳超参数等。
完成后,解锁测试数据以报告模型的准确性(只是为了强调,不要使用此反馈来调整模型)。
如果您对测试数据的准确性不满意,请考虑重新考虑您的模型。如果您对测试数据结果不满意,一旦模型投入生产,您将不会满意。
如果您没有足够的数据来创建三个分区,请考虑使用k-fold cross validation。
【讨论】:
感谢您的回答。但是,在调整验证数据集后,当测试数据结果不如您希望的那样好时会发生什么。你能重新开始还是作弊? @shell 然后你需要对你的模型做点什么,因为无论如何它在生产中表现不佳。 我明白了,谢谢。很难决定谁赞成这两个答案都很好并回答我需要知道的。【参考方案2】:好吧,您可以这样做(假设您还有第三组数据,有时称为“验证”集)。它被称为提前停止。我不认为这样做有什么好处。是否提前停止取决于训练集和验证集的最佳参数的相对位置。如果我没记错的话,大约一半的时间你会提前停下来,一半的时候你不会。
【讨论】:
【参考方案3】:这是作弊。以这种方式训练的模型对于“在现实生活中”的表现没有任何合理的保证
你应该做的是有一个单独的机制来检测学习何时完成(看起来你的训练是迭代的),它可能会分析模型本身,或者使用一些单独的(通常称为验证)保持 -数据集的一部分。
简而言之:除了报告最终价值之外,您不能将测试数据用于任何事情,也不能将任何决策基于它。
【讨论】:
我对公理的评论相同。当测试数据结果达不到标准时会发生什么?你能重新开始吗?还是那也是作弊? 这也是作弊。在开发新方法时显然很难避免,但这是一个已知现象。这就是为什么要完美评估,处理这个心理问题 - 最好根本没有访问测试数据,并请其他人进行最终评估。以上是关于机器学习防止过拟合这是作弊吗?的主要内容,如果未能解决你的问题,请参考以下文章