如果我的训练和测试准确性/损失一致,我是否需要验证数据?

数据挖掘 机器学习 神经网络 深度学习 评估
2021-10-03 10:46:20

我试图以验证数据集的形式了解第三次拆分的目的。我不一定在这里谈论交叉验证。


在下面的场景中,模型似乎对训练数据集过度拟合。

Train dataset {acc: 97%, loss: 0.07}
Test dataset {acc: 90%, loss: 8.02}

但是,在这种情况下,它看起来更加平衡。

Train dataset {acc: 95%, loss: 1.14}
Test dataset {acc: 93%, loss: 1.83}

如果我的训练和测试准确性/损失一致,我是否需要验证数据?设置 10% 的验证拆分的目的是为了在训练集上评估模型之前确保这种平衡吗?它证明了什么?

2个回答

您并不总是需要 3 个单独的数据集。如果您在选择最终模型之前进行一些参数或超参数调整,通常会将数据集分成 3 个。调整通常会将来自第二个数据集的偏差添加到您的模型中,从而降低其性能。例如:

  1. 如果您在多次迭代中手动调整模型并使用第二个数据集的结果来找到最佳参数。通过这样做,您将来自第二个数据集的一些信息构建到您的模型中。这将使第二个数据集不是您最终模型的良好、公正的基准。因此,您将希望使用第三个未触及的数据集,为您的模型提供无偏的最终性能测量

  2. 一些模型在构建模型以评估损失等时在内部使用验证数据集。这将导致在模型中包含偏差时出现相同的问题。例子:

    model.fit(
        train_features,
        train_labels,
        batch_size=20,
        epochs=20,
        validation_data=(val_features, val_labels), # <- here
        verbose=0)
    

您保持不同的唯一原因是将其设置为在看不见的数据上测试模型。

Seeing 不仅仅是在训练中使用数据,还包括在您使用它来测试和调整参数时。在那次试验中,您实际上是在将您的模型拟合到测试数据中。

症结是- 最后一组必须被视为新数据并且只尝试了几次