2017-02-27 495 views
0

我使用递归特征消除和交叉验证(rfecv)为了找到我有的几个特征(m = 154)的最佳准确性分数。scikit学习(sklearn)中的特征如何排在RFECV中?

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

的排名(rfecv.ranking_)和相关的得分(rfecv.grid_scores_)是混淆了我。正如你可以从排名前十的特征(排名前十)中看到的,他们的排名不是基于分数。我知道排名与在交叉验证过程中排除功能的方式和时间有关。但是,这个分数与排名有什么关系?我希望排名最高的功能得分最高。

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 
+0

你错误地解释了'grid_scores_'和'ranking_'。他们没有任何关联。 'grid_scores_'不是特征分数。 –

+0

他们的得分是多少?你能详细说明吗?那么排名是什么呢?感谢您抽出宝贵的时间。 –

+0

从文档:“交叉验证得分,grid_scores_ [i]对应于第i个要素子集的CV得分。”它们不代表特征的分数。它们表示在选择某些特征时评估者的得分。 –

回答

1

_grid_scores不是第i个特征的分数,它是当与特征的第i子集训练所述估计所产生的得分。

要理解这意味着什么,请记住递归特征消除(RFE)通过训练模型,评估模型,然后移除最不重要的特征并重复。

因此,_grid_score[-1]将是在所有功能上训练的评估者的得分。 _grid_score[-2]将被删除的step功能的估计值的得分。 _grid_score[-3]将是评估人员的得分,其中2*step功能已删除。

因此,网格分数并不反映个别特征的评分。事实上,如果step大于1,则网格分数将比特征少。

+0

非常感谢!我如何知道每个子集中的哪些功能? –

+0

这些功能按照与排名相反的顺序排除。不幸的是,您不知道排名1特征(即所选特征)中排除特征的顺序。 – Nimrand