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

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

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

我使用的是神经网络模型

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


回答:

导致高泛化差距的原因:

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

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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