【问题标题】:Validation and Testing accuracy widely different验证和测试的准确性差异很大
【发布时间】:2018-07-20 23:33:09
【问题描述】:

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

但是,同一模型在测试数据上的准确度为 0.05。

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

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

【问题讨论】:

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


    【解决方案1】:

    泛化差距较大的原因:

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

    【讨论】:

    • 我随机拆分了我的数据,但是 train、val 和 test 的分布不同,可能是因为样本数量少(1430)。有时对数据进行洗牌以找到提供相似分布的拆分是否公平?
    猜你喜欢
    • 2020-12-16
    • 2019-07-09
    • 1970-01-01
    • 2021-09-12
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    相关资源
    最近更新 更多