验证和测试准确率差异很大

我目前正在kaggle上处理一个数据集。在用训练数据训练模型后,我用验证数据进行了测试,得到了大约0.49的准确率。

然而,同样的模型在测试数据上的准确率只有0.05。

我使用的是神经网络模型

那么,导致这种情况的可能原因是什么?如何开始检查和纠正这些问题呢?


回答:

导致高泛化差距的原因:

  1. 不同分布:验证集和测试集可能来自不同的分布。请在代码中验证它们是否确实是从相同的过程采样的。
  2. 样本数量:验证集和/或测试集的规模太小。这意味着经验数据分布差异过大,解释了报告的准确率差异。一个例子是数据集包含数千张图像,但也有数千个类别。那么,测试集中可能包含验证集中没有的某些类别(反之亦然)。使用交叉验证来检查,测试准确率是否总是低于验证准确率,或者它们在每个折叠中是否总体差异很大。
  3. 超参数过拟合:这也与两个集合的规模有关。你是否进行了超参数调优?如果是的话,你可以检查在调优超参数之前是否存在准确率差距,因为你可能已经在验证集上“过拟合”了超参数。
  4. 损失函数与准确率:你报告了不同的准确率。你也检查了训练、验证和测试损失了吗?你是在损失函数上训练模型的,所以这是最直接的性能衡量。如果准确率与你的损失函数仅松散相关,并且测试损失与验证损失大致相同,这可能解释了准确率差距。
  5. 代码中的错误:如果测试集和验证集是从同一个过程采样并且足够大,它们是可以互换的。这意味着测试和验证损失必须大致相等。所以,如果你已经检查了以上四点,我的下一个最佳猜测是代码中存在错误。例如,你可能不小心也在验证集上训练了模型。你可能需要在一个更大的数据集上训练模型,然后检查准确率是否仍然存在差异。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注