【问题标题】:What's the difference between scoring in RFECV versus GridSearchCV?RFECV 与 GridSearchCV 的评分有什么区别?
【发布时间】:2020-02-22 19:06:22
【问题描述】:

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

【问题讨论】:

  • 只是出于好奇,您是否有不为您的问题的答案投票的个人政策?
  • @desertnaut 不,只是不知道这对人们很重要。谢谢你告诉我!
  • 谢谢。投票是整个 SO 模型的核心 - 您可能想快速查看Why is voting important?

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


【解决方案1】:

为什么会这样

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

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

[...]

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

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

分数 (self, X, y, sample_weight=None)

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

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

哪些方法是正确的?

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

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

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

【讨论】:

    猜你喜欢
    • 2021-02-16
    • 2019-02-14
    • 2016-02-12
    • 2021-06-12
    • 2021-07-11
    • 2016-12-02
    • 2012-03-22
    • 1970-01-01
    • 2019-06-02
    相关资源
    最近更新 更多