RFECV与GridSearchCV中评分的区别是什么?

我正在尝试运行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中使用相同的评分指标时,我得到了不同的最佳特征、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)

回答:

为什么会发生这种情况

在第二种情况下,如果你没有明确指定scoringGridSearchCV将使用所用估计器的默认评分,这里是LogisticRegression;从文档中可以看到:

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

[…]

如果为None,将使用估计器的score方法。

那么LogisticRegression的评分是什么呢?再次从文档中可以看到:

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

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

因此,在第一种情况下,对于GridSearchCV部分,你得到的是最大化准确率的参数,而在第二种情况下,是最大化召回率的参数。原则上,最大化这两个不同指标的参数不必相同(它们可以相同,但也可能相同,就像这里的情况)。

这两种方法哪一种是正确的?

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

话虽如此,第一种方法确实看起来有点奇怪——为什么你会在RFECVGridSearchCV期间优化两个不同的指标?至少在原则上,根据你选择的指标优化所有内容会更有意义。

再次提醒,所有这些技术实际上都是临时的方法,背后没有太多理论;最终的评判者是实验。所以,如果你感兴趣,比如说,最大化你的最终模型的准确率,但你发现一个中间的RFECV阶段试图最大化召回率,最终能提供更好的整体准确率,你完全可以选择这种方法…

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注