【问题标题】:GridSearchCV & RandomizedSearchCV - do you refit the model after runningGridSearchCV & RandomizedSearchCV - 你在运行后重新调整模型吗
【发布时间】:2020-03-12 12:08:03
【问题描述】:
我有一些测试和训练数据,测试数据没有任何因变量。
我目前正在运行 GridSearchCV 或 RandomizedSearchCV 来寻找最佳参数。
我应该将我的所有 "test" X 和 y 值传递到 GridSearchCV 或 RandomizedSearchCV 吗?
我知道它会进行交叉验证,所以我相信它可以吗?
但如果是这种情况,best_estimator 适合哪些数据?所有的?还是来自其中一个折叠的数据?
之后需要重新拟合全套测试数据吗?
【问题讨论】:
标签:
python
machine-learning
scikit-learn
cross-validation
gridsearchcv
【解决方案1】:
这里有很多问题,我会尝试一一回答。
- 我是否应该将所有“测试”X 和 y 值传递到 GridSearchCV 或 RandomizedSearchCV?
您提到您的测试数据没有因变量,在这种情况下,您无法将其传递给您的模型。即使您可以访问因变量的值,也不应该将它们发送到您的 GridSearchCV 或 RandomSearchCV,这些方法将在内部创建一个验证集,您的模型将在该验证集上针对每个超参数设置进行测试。
- best_estimator 适合哪些数据?
这取决于您如何初始化GridSearchCV 或RandomizedSearchCV 对象,这两种方法都有一个名为refit 的参数,当设置为TRUE(默认情况下)将使用整个数据重新拟合模型。
- 之后需要重新拟合全套测试数据吗?
通常,您不会使用测试数据来调整超参数。您使用验证集进行此操作,一旦您冻结了您的模型,您就可以使用测试集来检查模型的性能,这将是对模型性能的无偏估计。
希望这会有所帮助!
【解决方案2】:
没有什么可以阻止您使用 test 数据集来为您的模型找到最佳超参数。但是,在这样做之后,您无法真正判断模型的泛化程度,即在看不见的数据上的表现,因为您使用了 test 集来调整模型,使其无法测量模型的性能。
我也相信Cross Validated 会是提出此类问题的更好地方。