sklearn:通过交叉验证消除递归特征的好处是什么?

时间:2018-06-19 08:25:32

标签: python machine-learning scikit-learn

当我查看Recursive feature elimination with cross-validation时,我想知道sklearn.feature_selection.RFECV()的实际用途是什么。

实际上,它只是给了我最佳数量的功能,但没有告诉我任何这些功能

与此相反,sklearn.feature_selection.RFE让我回到rfe.ranking_

我不应该仅使用sklearn.feature_selection.RFE吗?

或者我忽略了什么?

2 个答案:

答案 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)))