在RFECV和GridSearchCV中评分之间有什么区别?

时间:2019-10-26 22:42:28

标签: python machine-learning scikit-learn grid-search rfe

我正在尝试运行RFECV以选择最佳功能,并尝试运行GridSearchCV获得最佳超参数。我的代码如下:

params = {'estimator__C': [1e-4, 1e4]}
estimator = LogisticRegression(random_state=123)
selector = RFECV(estimator, step=1, cv=5, scoring='recall')
clf = GridSearchCV(selector, params, cv=5)
clf.fit(X_train, y_train)

当我在GridSearchCV中包含相同的评分标准时,我从cv_results获得了不同的最佳功能,n_features和参数。为什么会发生这种情况?哪种方法正确?

params = {'estimator__C': [1e-4, 1e4]}
estimator = LogisticRegression(random_state=123)
selector = RFECV(estimator, step=1, cv=5, scoring='recall')
clf = GridSearchCV(selector, params, cv=5, scoring='recall')
clf.fit(X_train, y_train)

1 个答案:

答案 0 :(得分:1)

  

为什么会这样

在第二种情况下,如果您未明确指定scoring,则GridSearchCV将使用所用估计量的默认评分,此处为LogisticRegression;来自docs

  

评分:字符串,可调用,列表/元组,字典或无,默认值:无

     

[...]

     

如果为“无”,则使用估算器的评分方法。

LogisticRegression的得分是多少?再次来自docs

  

得分 (自我,X,y,sample_weight =无)

     

返回给定测试数据和标签的平均准确度。

因此,在第一种情况下,对于GridSearchCV部分,您将获得使 accuracy 最大化的参数,而在第二种情况下,将使 recall < / em>。原则上,最大化这两个不同指标的参数不必相同(它们可以当然可以,但它们可以很好地 可以像这里一样)。

  

以下哪种方法是正确的?

从技术上讲,这两种方法都是正确的;唯一可以回答该问题的人是你自己,它与您的 business 问题更可取的度量标准有关。

也就是说,第一种方法确实看起来很怪异-为什么要在RFECVGridSearchCV期间针对两个不同指标进行优化?至少从原则上讲,根据您选择的指标优化所有内容将更为有意义。

再次,请记住,所有这些技术实际上都是 ad hoc 方法,它们背后没有太多理论;最终的判断是实验。因此,例如,如果您有兴趣最大化最终模型的准确性,但是您发现尝试最大化召回率的中间RFECV阶段最终会提供更好的总体准确性,那么您可能只是加油...