Python 机器学习防止过度装配这是作弊吗?

Python 机器学习防止过度装配这是作弊吗?,python,machine-learning,scikit-learn,neural-network,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. 列车:50.5%-试验:50.2% 列车:55.5%-试验:5

在培训期间评估培训/测试结果时,请说明以下数值:

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.
列车:50.5%-试验:50.2%
列车:55.5%-试验:53.2%
列车:62.5%-试验:58.2%
列车:69.5%-试验:62.2%

训练:75.5%-测试:59.2%这取决于你在做什么

如果您使用测试精度来拟合超参数,那么是的,您是在作弊。测试数据正在间接地“泄漏”到您的训练数据中,您的拟合过度

因此,建议有3个数据集:培训、测试和验证数据

将测试数据锁定在一边,在不调整模型(培训)之前不要触摸它。

尽可能多地使用验证数据,以找到最佳的超参数等

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

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


如果您没有足够的数据来创建三个分区,请考虑执行。

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

你应该做的是有一个单独的机制来检测学习何时结束(看起来你的训练是迭代的),它可以分析模型本身,或者使用一些单独的(通常称为验证)来保留数据集的一部分


简而言之:您不能使用测试数据来任何事情除了报告最终值之外,您不能基于它来任何决策

好吧,您可以这样做(假设您还有第三组数据,有时称为“验证”集)。这叫提前停车。我认为这样做没有什么好处;是否提前停止取决于训练集和验证集的最佳参数的相对位置。如果我没记错的话,大约一半的时间你会提前停止,一半的时间你不会。谢谢你的回答。但是,在调整验证数据集之后,当测试数据结果不如您希望的那么好时会发生什么呢。你能重新开始吗?或者这是作弊吗?@shell那么你需要对你的模型做点什么,因为它无论如何都不会在生产中表现良好。我明白了,谢谢。很难决定投票给谁这两个答案都很好,回答了我需要知道的问题。和我给axiom的评论一样。当测试数据结果不符合标准时会发生什么?你能重新开始吗?还是这也是作弊?这也是作弊。显然,在开发新方法时很难避免,但这是一个已知的现象。这就是为什么要进行完美的评估,处理这个心理问题——最好不要接触测试数据,而让其他人做最终评估。