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

时间:2019-10-15 09:19:59

标签: python keras neural-network cross-validation

在scikit中如何实现GridSearchCV()(和RandomizedSearchCV())?我想知道以下几点:使用这些技术之一时,如何考虑以下方面:

  • 验证集
  • 模型选择
  • 超参数调整
  • 预测

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

CV

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

在第一次迭代中,模型适合训练折叠,分为不同的折叠。我已经在这里挣扎了:模型是否经过一次折叠训练,然后在验证折叠上进行了测试? 那么下一折会怎样?该模型是否保留其第一个训练折叠所达到的权重,还是会在下一个训练折叠中重新初始化?

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

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

在上面的示例中,总共有25折。具有一组恒定的超参数的模型是否适合并测试了20次? 假设我们要调整两个超参数:学习率和辍学率,它们都有两个级别:

  • learning_rate = [0.3,0.6]和
  • dropout_rate = [0.4,0.8]。

神经网络现在能适应80次吗?并且当不仅具有单个模型而且具有例如两种模型(神经网络和随机森林),整个过程将执行两次?

是否有可能看到GridSearchCV()将考虑多少折?

我看过Does GridSearchCV perform cross-validation?Model help using Scikit-learn when using GridSearchscikit-learn GridSearchCV with multiple repetitions,但是我看不到我的问题的清晰准确的答案。

1 个答案:

答案 0 :(得分:1)

k折方法:

例如,将训练集分为n个部分(k折)。5。将第一部分作为验证集,将其他四个部分作为训练集。您进行培训,这将为您提供培训/简历表现。您执行5次(折叠次数),每个折叠成为验证集,其他折叠成为训练集。最后,您需要对性能进行均值以获得模型的简历性能。这是k折。

现在,GridSearchCV是使用k折方法的超参数调谐器。基本原则是,您给gridsearch一个包含要测试的所有超参数的字典,然后它将测试所有超参数(字典)并选择最佳的超参数集(具有最佳模型简历性能的超参数集)。这可能需要很长时间。

您可以在gridsearch中传递一个模型(估计量),一组参数,并且如果需要k折的数量。

示例:

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

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