0

我正在尝试运行 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)
4

1 回答 1

1

为什么会这样

在第二种情况下,您没有明确指定scoring,GridSearchCV将使用使用的估计器的默认评分,这里LogisticRegression; 来自文档

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

[...]

如果没有,则使用估计器的评分方法。

那分数是为了LogisticRegression什么?再次来自文档

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

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

因此,在第一种情况下,对于GridSearchCV零件,您将获得最大化准确度的参数,而在第二种情况下,获得最大化召回率的参数。原则上,最大化这两个不同指标的参数不必相同(当然可以,但也可以一样,就像这里一样)。

这些方法中哪一个是正确的?

从技术上讲,这两种方法都是正确的;唯一能回答这个问题的是你自己,这与哪种指标更适合你的业务问题有关。

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

同样,请记住,所有这些技术实际上都是临时方法,背后没有太多理论;最终的判断是实验。所以,如果你对最大化最终模型的准确性感兴趣,但你发现RFECV试图最大化召回率的中间阶段最终会提供更好的整体准确性,你可能会选择它。 .

于 2019-10-26T23:17:10.383 回答