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
我目前正在研究一个问题,该问题比较三种不同的机器学习算法在同一数据集上的性能。我将数据集分成 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