scikit learn(sklearn) 中 RFECV 中的特征如何排名?

Posted

技术标签:

【中文标题】scikit learn(sklearn) 中 RFECV 中的特征如何排名?【英文标题】:How are features ranked in RFECV in scikit learn(sklearn)? 【发布时间】:2017-07-18 09:38:11 【问题描述】:

我使用递归特征消除和交叉验证 (rfecv) 来找到我拥有的几个特征的最佳准确度得分 (m =154)。

rfecv = RFECV(estimator=logreg, step=1, cv=StratifiedKFold(2),
              scoring='accuracy')
rfecv.fit(X, y)

排名 (rfecv.ranking_) 和相关分数 (rfecv.grid_scores_) 让我感到困惑。从前 13 个特征(排名前 10)中可以看出,它们的排名不是基于分数。我了解排名与交叉验证过程中排除该功能的方式和时间有关。但那么分数与排名有什么关系呢?我希望排名最高的功能得分最高。

Features/Ranking/Scores
b       1       0.692642743
a       1       0.606166207
f       1       0.568833672
i       1       0.54935204
l       2       0.607564808
j       3       0.613495238
e       4       0.626374391
l       5       0.581064621
d       6       0.611407556
c       7       0.570921354
h       8       0.570921354
k       9       0.576863707
g       10      0.576863707

【问题讨论】:

您误解了grid_scores_ranking_。它们没有任何相关性。 grid_scores_ 不是很多功能。 他们的分数是多少?你能详细说明吗?那么排名是多少呢?感谢您抽出宝贵时间。 来自文档:“交叉验证分数使得 grid_scores_[i] 对应于第 i 个特征子集的 CV 分数。”它们不代表特征分数。 They represent score of estimator when certain features are selected. 你很困惑,因为grid_scores_的大小与ranking_相同。把step改成1以上,看看效果。 【参考方案1】:

_grid_scores 不是第 i 个特征的分数,它是使用第 i 个特征子集训练时估计器产生的分数。

要理解这意味着什么,请记住递归特征消除 (RFE) 的工作原理是训练模型、评估它,然后删除 step 最不重要的特征,然后重复。

所以,_grid_score[-1] 将是在所有特征上训练的估计器的分数。 _grid_score[-2] 将是删除 step 特征的估计器的分数。 _grid_score[-3] 将是删除了 2*step 特征的估计器的分数。

因此,网格得分不反映单个特征的得分。实际上,如果 step 大于 1,则网格分数会比特征分数少。

【讨论】:

非常感谢!我如何知道每个子集中有哪些特征? 特征按排名倒序淘汰。不幸的是,您不知道在 rank-1 特征(即选定特征)中消除特征的顺序。

以上是关于scikit learn(sklearn) 中 RFECV 中的特征如何排名?的主要内容,如果未能解决你的问题,请参考以下文章

Python---scikit-learn(sklearn)模块

LinearSVC sklearn (scikit-learn) 中 C 的行为

skLearn 支持向量机

sklearn第二讲scikit-learn 方法一览图

Sklearn K均值聚类

scikit learn(sklearn) 中 RFECV 中的特征如何排名?