是否需要验证集来训练模型?

时间:2018-03-02 02:44:16

标签: validation machine-learning cross-validation

我用CNN为我的研究建立了一个3D图像分类模型。我只有5000个图像,使用4500个图像进行训练,500个图像用于测试集。 我为训练尝试了不同的架构和参数 F1得分和训练集的准确率高达0.9。幸运的是,我没有花费大量时间来找到这些高精度的设置。

现在我将这个模型用于测试集,我得到了一个非常令人满意的预测,F1得分为0.8~0.85。

我的问题是,是否有必要进行验证?当我参加机器学习课程时,我被教导使用验证集来调整超参数。我没有进行k-fold交叉验证的一个原因是因为我没有太多数据并希望尽可能多地使用训练数据。我的模型显示了对测试集的非常好的预测。只要准确度/ f1得分/ ROC足够好,我的模型是否仍能说服人们?或者我可以尝试仅通过进行k折交叉验证来说服人们,而无需单独在测试集上进行测试?

谢谢!

2 个答案:

答案 0 :(得分:0)

交叉验证数据集用于调整超参数。 除非您完成所有操作,否则不应触摸测试集!

正如评论中所建议的,我建议进行k折交叉验证(例如k = 10):

  1. 将数据集拆分为k = 10集
  2. 对于i = 1..10:使用集{1,2,...,10} \ i作为训练集(并找到超参数)并将i设置为评估。
  3. 您的最终得分是那些k = 10个评估分数的平均值。

答案 1 :(得分:0)

不幸的是,我认为单一的结果是不够的。这是因为你的结果可能只是纯粹的运气。 使用10倍的CV,您可以使用90%的数据(4500张图像)进行培训,剩下的10%用于测试。所以基本上你没有在训练中使用更少的图像,结果更可靠。

Martin提出的验证方案已经很好了,但如果您正在寻找更强大的东西,您应该使用嵌套交叉验证:

  • 将数据集拆分为K folds
  • 第i个训练集由{1,2,..,K} \ i折叠组成。
  • 将训练集分成N个折叠。
  • 设置超参数值网格
  • 对于每个超参数值集:
    • 训练{1,2,..,N} \ j折叠并在第j折上进行测试;
    • 迭代所有N次折叠并计算平均F值。
  • 选择最大化指标的超参数集。

  • 使用第i个训练集和最佳超参数集训练模型,并在第i个折叠处进行测试。

  • 对所有K折叠重复并计算平均指标。

平均指标可能不足以证明方法的稳定性,因此建议同时提供置信区间或结果的方差。

最后,为了对您的方法进行非常稳定的验证,您可以考虑用重新采样程序替换初始K折交叉验证。不是以K折叠分割数据,而是使用90%的样本作为训练和10%的样本进行随机重新采样数据集。用M> K重复这M次。如果计算速度足够快,您可以考虑这样做20-50或100次。