GridSearchCV 是否执行交叉验证?

Does GridSearchCV perform cross-validation?

我目前正在研究一个问题,该问题比较三种不同的机器学习算法在同一数据集上的性能。我将数据集分成 70/30 training/testing 组,然后使用 GridSearchCV 和 X_train, y_train.

对每个算法的最佳参数进行网格搜索

第一个问题,我应该对训练集执行网格搜索还是应该对整个数据集执行网格搜索?

第二个问题,我知道 GridSearchCV 在其实现中使用了 K-fold,如果我在 GridSearchCV 中比较的所有三种算法都使用相同的 X_train, y_train,这是否意味着我执行了交叉验证?

任何答案将不胜感激,谢谢。

是的,GridSearchCV 执行 cross-validation。如果我对这个概念的理解是正确的——您希望让模型看不到您的部分数据集以便对其进行测试。

因此您针对训练数据集训练您的模型并在测试数据集上测试它们。

- 你可能想检查一下...

scikit 中名称以 CV 结尾的所有估算器执行 cross-validation。 但是你需要保留一个单独的测试集来衡量性能。

因此您需要拆分整个数据以进行训练和测试。暂时忘掉这个测试数据。

然后仅将此训练数据传递给grid-search。 GridSearch 会将此训练数据进一步拆分为训练和测试以调整传递给它的 hyper-parameters。最后用找到的最佳参数在整个火车数据上拟合模型。

现在你需要在你一开始保留的测试数据上测试这个模型。这将为您提供接近真实世界的模型性能。

如果您将整个数据用于 GridSearchCV,那么测试数据将泄漏到参数调整中,然后最终模型可能无法在较新的看不见的数据上表现得那么好。

您可以查看我的其他答案,其中更详细地描述了 GridSearch:

  • scikit-learn GridSearchCV with multiple repetitions