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

时间:2018-02-10 08:13:52

标签: machine-learning deep-learning cross-validation training-data kaggle

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

然而,相同的模型在测试数据上给出0.05的准确度。

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

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

1 个答案:

答案 0 :(得分:6)

高泛化差距的原因:

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