使用交叉验证调整超参数和评估

Tuning of hyperparameters and evaluation using cross validation

我在掌握如何使用交叉验证进行超参数调整和评估的标准方法时遇到了一些困难。我尝试做 10-fold CV。以下哪项是正确的做法?

  1. 所有数据都用于参数调整(例如,使用随机网格搜索和交叉验证)。这 returns 最好的超参数。然后,用这些超参数构建一个 new 模型,并可以通过交叉验证来评估它(训练九次,测试一次,最后是准确性或混淆等指标矩阵取平均值)。

  2. 我发现的另一种方法是先将数据分成训练集和测试集,然后只对训练集进行交叉验证。然后将使用测试集进行评估。然而,据我所知,这会破坏交叉验证的整个概念,因为它背后的想法是独立于拆分,对吧?

  3. 最后,我的主管告诉我,我将使用八折进行训练,一折用于超参数估计,一折用于测试(以及评估)。但是,我找不到任何使用此方法的 material。这是标准程序还是我只是理解错了什么?

一般来说,您可以将数据分成 3 组。

  • 训练集
  • 验证集
  • 测试集

测试集:
测试集是最容易解释的。
一旦您创建了测试集(15-30% 的数据)。您将此数据集存储在某处,并且在您认为完成之前不要再触摸该数据集。
- 原因很简单,一旦你开始关注这个数据集(例如增加 AUC 或......)然后你就开始过度拟合你的数据......

验证集也是如此 (+/-)。当你过度调整你的参数等时,你开始关注这个集合......这意味着你不再泛化了。 (一个好的模型应该适用于所有数据,而不仅仅是测试和验证集)。

话虽如此,现在您只完成了训练和验证集。

交叉验证:使用交叉验证的一些动机是为了更好地概括和查看您的model/data(想象一下,一些特殊情况只存在于验证集中等。+你不采取一个单一的决定是理所当然的。 - 例如的主要缺点10 折交叉验证是......它需要 10 倍的时间才能完成......但它会给你一个更值得信赖的结果......(例如,如果你进行 10 折交叉验证并且你的 AUC 从 80 85 75 77 81 65 波动... --> 那么您可能会遇到一些数据问题 ... 在完美的情况下,AUC 之间的差异应该很小 ...

不过...我会怎么做(而且还取决于你的资源、模型、时间、数据集大小)

  • 创建 10 个随机折叠。 (并跟踪它们)

  • 尽可能进行 10 次网格搜索(以大致了解每个参数的重要性,(您不必采取小步骤......例如随机森林有一个max_features 参数,但是如果你注意到当该值为 log2 时所有模型的性能都较低,那么你可以删除该超参数)

  • 检查哪些超参数表现良好
  • 在表现良好的区域进行 10 倍随机搜索或网格搜索

但每次新实验始终使用相同的折叠,这样您就可以相互比较模型。 + 通常你会发现有些折叠比其他折叠更难,但它们对所有模型来说都很困难