在整个数据集上训练时结果更糟

时间:2021-02-04 12:59:01

标签: python tensorflow validation keras

在确定我的模型的架构后,我决定通过在 validation_split = 0 中设置 fit() 在整个数据集上训练模型。我认为这会改善基于这些来源的结果:

What is validation data used for in a Keras Sequential model?

Your model doesn't "see" your validation set and isn´t in any way trained on it

https://machinelearningmastery.com/train-final-machine-learning-model/

What about the cross-validation models or the train-test datasets?

They’ve been discarded. They are no longer needed.
They have served their purpose to help you choose a procedure to finalize.

但是,我在没有验证集的情况下得到了更糟糕的结果(与 validation_split = 0.2 相比),所有其他参数都保持不变。

对此有解释吗?或者,当排除部分训练数据(并用作验证)时,我的模型碰巧在固定的测试数据上表现更好,这只是偶然。

1 个答案:

答案 0 :(得分:1)

嗯,这确实是一个很好的问题,涵盖了许多机器学习相关概念,特别是偏差-方差权衡

正如@CrazyBarzillian 在评论中暗示的那样,更多的数据可能会导致过度拟合,是的,我们需要有关您的数据的更多信息才能找到解决方案。但我想从更广泛的角度向您解释几点,这可能会帮助您理解为什么会发生这种情况。

说明

  • 每当您的数据具有更多特征时,您的模型就会学习一个非常复杂的方程来求解它。简而言之,模型对于我们拥有的数据量来说太复杂了。这种情况称为高方差,会导致模型过度拟合。我们知道,当训练误差远低于测试误差时,我们面临着高方差问题。高方差问题可以通过减少特征数量(通过应用 PCA、异常值去除等),通过增加数据点的数量来解决

  • 有时,您的数据中的特征较少,因此模型会学习一个非常简单的方程来求解。这称为高偏差。在这种情况下,添加更多数据无济于事。在这种情况下,使用较少的数据或添加更多功能会有所帮助

我的假设

如果您的模型在添加更多数据时表现不佳,我猜您的模型会遭受高偏差。但是要检查声明添加更多数据导致不良结果在您的情况下是否正确,您可以执行以下操作:-

  • 玩一些超参数
  • 尝试其他机器学习模型
  • 在回归或 F1 的情况下寻找 r2 分数或平均绝对误差,而不是准确率分数,在分类情况下寻找精度、召回率

如果在完成这两件事后仍然得到相同的结果,即更多的数据导致较差的结果,那么您可以确定存在高偏差,并且可以增加特征数量或减少数据。

解决方案

通过减少数据,我的意思是使用小数据但更好的数据。更好的数据意味着假设您正在做一个分类问题并且您有三个类(A、B 和 C),如果所有数据点在三个类之间平衡,则数据会更好。您的数据应该是平衡的。如果不平衡,即 A 类具有大量样本,而 B 类和 C 类只有 3-4 个样本,那么您可以应用随机采样技术来克服它。

如何制作更好的数据

  • 平衡数据
  • 去除异常值
  • 缩放(标准化)数据

结论

更多的数据总是会导致好的模型,这是一个神话。实际上,数据的数量和质量也很重要。数据应该有数量和质量。这种保持质量和数量的游戏被称为偏差-方差权衡。