在scikit中如何实现GridSearchCV()(和RandomizedSearchCV())?我想知道以下几点:使用这些技术之一时,如何考虑以下方面:
?这是总结我困惑的图片:
什么时候,多久发生一次?为了简单起见,我们假设一个神经网络作为我们的模型。 到目前为止,我的理解:
在第一次迭代中,模型适合训练折叠,分为不同的折叠。我已经在这里挣扎了:模型是否经过一次折叠训练,然后在验证折叠上进行了测试? 那么下一折会怎样?该模型是否保留其第一个训练折叠所达到的权重,还是会在下一个训练折叠中重新初始化?
更准确地说:在第一次迭代中,模型是否四次拟合并在验证集上进行了四次测试,且在所有折痕之间都是独立的?
下一次迭代开始时,模型不会保留第一次迭代中的信息,对吗? 因此,所有迭代和所有折叠是否都彼此独立? 超参数在这里如何调整?
在上面的示例中,总共有25折。具有一组恒定的超参数的模型是否适合并测试了20次? 假设我们要调整两个超参数:学习率和辍学率,它们都有两个级别:
神经网络现在能适应80次吗?并且当不仅具有单个模型而且具有例如两种模型(神经网络和随机森林),整个过程将执行两次?
是否有可能看到GridSearchCV()
将考虑多少折?
我看过Does GridSearchCV perform cross-validation?,Model help using Scikit-learn when using GridSearch和scikit-learn GridSearchCV with multiple repetitions,但是我看不到我的问题的清晰准确的答案。
答案 0 :(得分:1)
k折方法:
例如,将训练集分为n个部分(k折)。5。将第一部分作为验证集,将其他四个部分作为训练集。您进行培训,这将为您提供培训/简历表现。您执行5次(折叠次数),每个折叠成为验证集,其他折叠成为训练集。最后,您需要对性能进行均值以获得模型的简历性能。这是k折。
现在,GridSearchCV是使用k折方法的超参数调谐器。基本原则是,您给gridsearch一个包含要测试的所有超参数的字典,然后它将测试所有超参数(字典)并选择最佳的超参数集(具有最佳模型简历性能的超参数集)。这可能需要很长时间。
您可以在gridsearch中传递一个模型(估计量),一组参数,并且如果需要k折的数量。
示例:
GridSearchCV(SVC(), parameters, cv = 5)
其中SVC()
是估计量,参数是您的超参数字典,而cv是折叠数。