GridSearchCV是否执行交叉验证?

kev*_*inH 16 python machine-learning scikit-learn cross-validation grid-search

我目前正在研究一个问题,该问题比较了同一数据集上三种不同的机器学习算法性能.我将数据集划分为70/30个训练/测试集,然后使用GridSearchCV和网格搜索每个算法的最佳参数X_train, y_train.

第一个问题,我想在训练集上进行网格搜索还是假设在整个数据集上?

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

任何答案都将不胜感激,谢谢.

Viv*_*mar 29

scikit中名称结尾的所有估算器都CV执行交叉验证.但是您需要保留一个单独的测试集来测量性能.

因此,您需要将整个数据拆分为训练和测试.暂时忘掉这个测试数据.

然后将此列车数据仅传递给网格搜索.GridSearch将此列车数据进一步分解为训练和测试,以调整传递给它的超参数.最后使用最佳参数将模型拟合到整个列车数据上.

现在,您需要在开始时保留的测试数据上测试此模型.这将为您提供近乎真实的模型性能.

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

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

  • @Psychotechnopath 是的。当网格搜索启动时将打印该信息。您可以通过使用“GridSearchCV”中的“verbose”参数来获取更多详细信息。 (2认同)

Max*_*axU 7

是的,GridSearchCV执行交叉验证.如果我正确理解了这个概念 - 您希望保留模型中看不到的部分数据集以进行测试.

因此,您可以针对列车数据集训练模型,并在测试数据集上对其进行测试.

在这里我做的几乎一样 - 你可能想检查一下......