【问题标题】:Worse results when training on entire dataset对整个数据集进行训练时结果更差
【发布时间】:2021-02-05 13:20:36
【问题描述】:

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

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 相比),所有其他参数都保持不变。

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

【问题讨论】:

  • 我们可能需要更多信息来猜测发生了什么。但请记住,如果数据越多,您可能会过度拟合……数据越少,您的模型就会“学习”泛化。

标签: python tensorflow validation keras


【解决方案1】:

这确实是一个非常好的问题,涵盖了许多与机器学习相关的概念,特别是 Bias-Variance Tradeoff

正如@CrazyBarzillian 的评论中暗示的那样,更多的数据可能会导致过度拟合,是的,我们需要更多关于您的数据的信息才能找到解决方案。但我想以更广泛的方式向您解释几点,这可能有助于您理解它发生的原因。

解释

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

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

我的假设

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

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

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

解决方案

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

如何制作更好的数据

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

结论

更多的数据总是会带来好的模型,这是一个神话。实际上除了数量之外,数据的质量也很重要。数据应该既有数量又有质量。这种保持质量和数量的游戏被称为Bias-Variance Tradeoff。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-22
    • 2022-11-11
    • 1970-01-01
    • 2019-03-02
    • 2017-12-12
    • 2013-08-29
    • 2021-05-20
    • 2018-05-06
    相关资源
    最近更新 更多