我目前正在使用 Python 和 Scikit learn 进行分类,并围绕 GridSearch 进行了一些阅读,我认为这是优化我的估计器参数以获得最佳结果的好方法。
我的方法是这样的:
- 将我的数据拆分为训练/测试。
- 使用 GridSearch 和 5Fold Cross 验证来训练和测试我的估计器(随机森林、梯度提升、SVC 等),以获得具有最佳超参数组合的最佳估计器。
- 然后,我使用我的测试集来预测分类并将它们与实际的类标签进行比较,计算我的每个估计器的指标,例如 Precision、Recall、FMeasure 和 Matthews Correlation Coefficient。
正是在这个阶段,我看到了奇怪的行为,我不确定如何进行。我是否从 GridSearch 获取 .best_estimator_ 并将其用作网格搜索的“最佳”输出,并使用此估计器执行预测?如果我这样做,我发现第 3 阶段的指标通常比我简单地训练所有训练数据并在测试集上进行测试要低得多。或者,我是否只是将输出 GridSearchCV 对象作为新的估计器?如果我这样做,我的第 3 阶段指标会得到更好的分数,但使用 GridSearchCV 对象而不是预期的分类器(例如随机森林)似乎很奇怪......
编辑: 所以我的问题是返回的 GridSearchCV 对象和 .best_estimator_ 属性有什么区别?我应该使用其中哪一个来计算进一步的指标?我可以像常规分类器一样使用这个输出(例如使用预测),否则我应该如何使用它?