在scikit learn(sklearn)中,RFECV如何对特征进行排名?

4

我使用递归特征消除和交叉验证(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_ 不是特征得分。 - Vivek Kumar
它们的分数是什么?你能详细说明一下吗?那么它们的排名是什么?感谢您抽出时间。 - Liam Hanninen
1
从文档中可以得知:"交叉验证分数是这样的,grid_scores_[i] 对应于第 i 个特征子集的 CV 分数。" 它们并不代表特征的分数,而是在选择某些特征时估计器的分数。 - Vivek Kumar
你感到困惑是因为 grid_scores_ 的大小与 ranking_ 相同。将 step 更改为大于1,以查看效果。 - Vivek Kumar
1个回答

8
_grid_scores 不是第 i 个特征的得分,而是当使用第 i 个特征子集进行训练时,估计器产生的得分。
要理解这意味着什么,请记住递归特征消除(RFE)的工作方式:通过训练模型、评估模型、然后删除step最不重要的特征并重复此过程。
因此,_grid_score[-1] 是在所有特征上训练的估计器的得分。_grid_score[-2] 是移除 step 特征后训练的估计器的得分。 _grid_score[-3] 是移除 2*step 特征后训练的估计器的得分。
因此,网格得分不反映单个特征的得分。 实际上,如果 step 大于 1,则网格得分将少于特征数。

非常感谢!我怎么知道每个子集中有哪些功能? - Liam Hanninen
3
特征将按照排名的相反顺序被消除。不幸的是,您不知道排名第一的特征(即选定的特征)被消除的顺序。 - Nimrand

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接