我目前正在研究一个问题,该问题比较三种不同的机器学习算法在同一数据集上的性能。我将数据集分成 70/30 的训练/测试集,然后使用 GridSearchCV 和 X_train, y_train
对每个算法的最佳参数进行网格搜索。
第一个问题,我应该对训练集执行网格搜索还是应该对整个数据集执行网格搜索?
第二个问题,我知道 GridSearchCV 在它的实现中使用了 K-fold,这是否意味着如果我对我在GridSearchCV?
任何答案将不胜感激,谢谢。
最佳答案
scikit 中名称以 CV
结尾的所有估计器都执行交叉验证。
但是您需要保留一个单独的测试集来衡量性能。
因此您需要拆分整个数据以进行训练和测试。暂时忘掉这个测试数据。
然后仅将此火车数据传递给网格搜索。 GridSearch 会将此训练数据进一步拆分为训练和测试,以调整传递给它的超参数。最后用找到的最佳参数在整个火车数据上拟合模型。
现在你需要在你一开始保留的测试数据上测试这个模型。这将为您提供接近真实世界的模型性能。
如果您将整个数据用于 GridSearchCV,那么测试数据将泄漏到参数调整中,然后最终模型可能无法在较新的看不见的数据上表现得那么好。
您可以查看我的其他答案,其中更详细地描述了 GridSearch:
关于python - GridSearchCV 是否执行交叉验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49160206/