当我查看Recursive feature elimination with cross-validation时,我想知道sklearn.feature_selection.RFECV()的实际用途是什么。
实际上,它只是给了我最佳数量的功能,但没有告诉我任何这些功能。
与此相反,sklearn.feature_selection.RFE让我回到rfe.ranking_
我不应该仅使用sklearn.feature_selection.RFE
吗?
或者我忽略了什么?
答案 0 :(得分:4)
这两个功能背后的核心思想是相同的,即以递归方式消除不如另一个重要的特征。不同之处在于这两者如何实现这一目标。
sklearn.feature_selection.RFE只是训练一个为特征赋予权重的估算器。它根据该估算器取出特征重要性并递归修剪它。
另一方面,通过交叉验证消除递归特征,将交叉验证添加到混合中。要素重要性的得分计算仅基于验证数据完成。根据数据的大小和使用的估算器,这可能是一个消耗更多资源的过程。
正如@Jan K所提到的,您可以使用ranking_
属性
根据文件
support_:形状数组[n_features]
The mask of selected features.
返回所选特征的布尔掩码,如
array([ True, True, True, True, True,
False, False, False, False, False], dtype=bool)
ranking_:形状数组[n_features]
特征排名,使得ranking_ [i]对应于第i个特征的排名位置。选定的(即估计的最佳)特征被指定为等级1.
例如(from official documentation example)
selector.ranking_
#output : array([1, 1, 1, 1, 1, 6, 4, 3, 2, 5])
其中selector是RFECV()对象
Refrences
答案 1 :(得分:0)
要添加到提供的答案中,我发现了以下代码,可以从中打印出与各个等级相对应的功能名称。别记得我在哪里找到它。
names = data.columns
print("Features sorted by their rank:")
print(sorted(zip(map(lambda x: round(x, 4), rfecv.ranking_), names)))