机器学习防止过度拟合这是作弊?

时间:2016-05-09 23:51:21

标签: python machine-learning scikit-learn neural-network

在培训期间评估培训/测试结果时,请说出这些值:

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.

当这种情况发生时,你能否停止训练模型,还是作弊?即,当测试精度降低时,停止训练模型。我知道你应该只在训练期间评估训练集,这就是我想知道的原因。

3 个答案:

答案 0 :(得分:4)

这是作弊。以这种方式训练的模型对“它在现实生活中”的表现没有任何合理的保证

你应该做的是有一个单独的机制来检测学习何时完成(似乎你的训练是迭代的),可能要么分析模型本身,要么使用一些单独的(通常称为验证)保持 - 出部分数据集。

简而言之:除了报告最终价值之外,您无法将测试数据用于<​​strong>任何,您无法根据做出任何决定

答案 1 :(得分:3)

这取决于你在做什么。

如果你使用测试精度来拟合超参数,那么是的,你是在作弊。测试数据是&#34;泄漏&#34;间接进入你的训练数据并且你过度拟合。

因此,建议有3个数据集:Train,Test和 Validation 数据。

锁定测试数据,在您调整模型(训练)之前不要触摸它。

尽可能多地使用验证数据来查找最佳超参数等。

完成后,解锁测试数据以报告模型的准确性(并强调,不要使用此反馈来调整模型)。

如果您对测试数据的准确性不满意,请考虑重新考虑您的模型。如果您对测试数据结果不满意,那么一旦模型投入生产,您将不会感到高兴。

如果您没有足够的数据来创建三个分区,请考虑执行k-fold cross validation

答案 2 :(得分:0)

嗯,你可以这样做(假设你还有第三组数据,有时称为“验证”集)。它被称为提前停止。我不认为这样做有什么好处;是否提前停止取决于训练和验证集的最佳参数的相对位置。如果我没记错的话,大概有一半的时间会提前停止,有一半的时间则不会。