验证和测试的准确性差异很大

use*_*311 2 machine-learning training-data cross-validation deep-learning kaggle

我目前正在研究kaggle中的数据集.在训练训练数据模型后,我在验证数据上进行测试,得到的精度约为0.49.

但是,相同的模型在测试数据上给出0.05的准确度.

我使用神经网络作为我的模型

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

Kil*_*ner 10

泛化差距高的原因:

  1. 不同的发行版:验证和测试集可能来自不同的发行版.尝试验证它们确实是从代码中的相同进程中采样的.
  2. 样本数:验证和/或测试集的大小太小.这意味着经验数据分布差异太大,解释了不同的报告精度.一个例子是由数千个图像组成的数据集,但也包括数千个类.然后,测试集可能包含一些不在验证集中的类(反之亦然).如果测试精度始终低于验证准确度,或者如果它们在每个折叠中通常差别很大,则使用交叉验证来检查.
  3. 超参数过度拟合:这也与两组的大小有关.你做过参数调整吗?如果是这样,您可以在调整超参数之前检查是否存在准确性差距,因为您可能在验证集上"过度拟合"超参数.
  4. 损失函数与准确度:您报告了不同的准确度.您是否也检查过火车,验证和测试损失?您可以在损失函数上训练模型,因此这是最直接的性能指标.如果精度仅与您的损耗函数松散耦合,并且测试损耗大约与验证损失一样低,则可能解释精度差距.
  5. 代码中的错误:如果测试和验证集是从同一进程中采样的并且足够大,则它们是可互换的.这意味着测试和验证损失必须大致相等.所以,如果你检查了上面的四点,我的下一个最好的猜测将是代码中的错误.例如,您也不小心在验证集上训练了模型.您可能希望在更大的数据集上训练模型,然后检查精度是否仍然不同.