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