RFECV 与 GridSearchCV 的评分有何区别?

What's the difference between scoring in RFECV versus GridSearchCV?

我正在尝试 运行 RFECV select 最好的特征和 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 中包含相同的评分指标时,我得到了不同的最佳特征 n_features 和来自 cv_results 的参数。为什么会发生这种情况,哪些方法是正确的?

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)

Why is this happening

在第二种情况下,如果您没有明确指定 scoringGridSearchCV 将使用所用估算器的默认评分,此处为 LogisticRegression;来自 docs:

scoring : string, callable, list/tuple, dict or None, default: None

[...]

If None, the estimator’s score method is used.

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

score (self, X, y, sample_weight=None)

Returns the mean accuracy on the given test data and labels.

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

which of these approaches is correct?

从技术上讲,这两种方法都是正确的;唯一可以回答这个问题的人就是你自己,它与你的 业务 问题更可取的指标有关。

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

再次请记住,所有这些技术实际上都是 临时 方法,背后没有太多理论;最终的裁判是实验。因此,如果您对最大限度地提高最终模型的准确性感兴趣,但您发现尝试最大化召回率的中间 RFECV 阶段最终会提供更好的整体准确性,您很可能只是去吧...