交叉验证是如何执行的以及 GridSearchCV() 具体如何执行?

How is Cross Validation performed and how GridSearchCV() specifically?

GridSearchCV() (and or RandomizedSearchCV()) 在 scikit 中是如何实现的?我想知道以下问题:在使用其中一种技术时,如何考虑以下方面:

?这是一张总结我的困惑的图片:

什么时候发生,多久发生一次?也许为了简单起见,让我们假设一个神经网络充当我们的模型。 目前我的理解:

在第一次迭代中,模型适合训练折叠,分成不同的折叠。在这里我已经很挣扎了:模型是在单折上训练然后在验证折上测试的吗? 下一次折叠会发生什么?该模型是否会保留其第一次训练折叠所获得的权重,还是会为下一次训练折叠重新初始化?

更准确地说:在第一次迭代中,模型是否在验证集上拟合了四次并在所有折叠之间独立测试了四次?

当下一次迭代开始时,模型不会保留第一次迭代的信息,对吗? 因此,所有迭代和所有折叠是否彼此独立? 这里的超参数是怎么调的?

在上面的例子中,总共有25次折叠。具有一组恒定超参数的模型是否拟合并测试了 20 次? 比方说,我们有两个超参数要调整:学习率和丢失率,都有两个级别:

请问神经网络现在拟合了80次?当不仅有一个模型而且例如两个模型(神经网络和随机森林),整个过程将执行两次?

有没有可能看看GridSearchCV()会考虑多少折?

我已经看到 , and scikit-learn GridSearchCV with multiple repetitions 但我看不到对我的问题的明确和准确的回答。

所以 k 折法:

你将你的训练集分成 n 部分(k 折),例如 5。你将第一部分作为验证集,将其他 4 部分作为训练集。您进行训练,这会给您带来 training/CV 的表现。您执行此操作 5(折叠次数)次,每次折叠都成为验证集,而其他折叠成为训练集。最后,您对性能进行平均以获得模型的 cv 性能。这是k折。

现在,GridSearchCV 是一个使用 k-folds 方法的超参数调谐器。原则是你给 gridsearch 一个字典,其中包含你想要测试的所有超参数,然后它将测试所有超参数(字典)和 select 最佳超参数集(具有最佳模型 cv 性能的超参数)。这可能需要很长时间。

你在 gridsearch 中传递一个模型(估计器),一组参数,如果你想要 k-folds 的数量。

示例:

GridSearchCV(SVC(), parameters, cv = 5)

其中 SVC() 是估计器,parameters 是您的超参数字典,cv 是折叠数。