嵌套交叉验证后如何获得最优超参数?

机器算法验证 机器学习 交叉验证 scikit-学习 超参数 优化
2022-03-17 21:50:21

一般来说,如果我们有一个大数据集,我们可以将其分为 (1) 训练、(2) 验证和 (3) 测试。我们使用验证来识别交叉验证中的最佳超参数(例如,SVM 中的 C),然后我们使用带有训练集的最佳超参数训练模型,并将训练后的模型应用于测试以获得性能。

如果我们有一个小数据集,我们就无法创建训练和测试集(样本不足)。因此,我们将进行交叉验证(k-fold、leave-one-out 等)来评估模型的性能。

我已经看到嵌套交叉验证(无论是重复的还是分层的)已被用于小数据集的设置,即在优化参数选择的同时生成广义模型性能。我的问题是,如何在嵌套交叉验证(重复/不重复)中获得最佳超参数? 如果可能的话,我有兴趣在 scikit-learn 中执行此操作。我对如何做到这一点有点困惑。

我已经阅读了几个资源,但没有一个给我这个问题的明确答案:

用于模型选择的嵌套交叉验证

嵌套交叉验证和特征选择:何时执行特征选择?

1个回答

概述

正如@RockTheStar在评论中正确总结的那样,嵌套交叉验证仅用于访问模型性能估计。与此分离,为了找到最好的超参数,我们需要对整个数据进行简单的调整和交叉验证。


详细说明:

调整和验证(内部和外部重采样循环)

在执行超参数调整的内部循环中,模型在训练数据中进行训练并在验证数据上进行验证。您找到最佳参数并在整个内循环数据上训练您的模型尽管它被训练来优化验证数据的性能,但评估是有偏见的。

所以这个模型是用测试数据测试的,所以希望没有偏差,给你一个性能估计。

最终模型

现在您知道模型的预期性能,您必须使用所有数据对其进行训练。但我们的模型不仅仅是算法,而是整个模型构建过程!

因此,对所有数据和内部循环的相同规范执行超参数调整。使用最好的超参数,用整个数据训练你的最终模型。这个最终模型的预期性能是您之前使用嵌套交叉验证评估的结果。

重申一下,最终模型的超参数是您期望的,它将为您提供在调整和验证步骤中找到的性能。