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

2 python machine-learning scikit-learn

当我看一下带有交叉验证的递归特征消除时,我想知道sklearn.feature_selection.RFECV()的实际用途是什么。

实际上,它只是为我提供了最佳数量的功能,但没有告诉我这些功能的任何信息。

与此相反,sklearn.feature_selection.RFE给了我rfe.ranking_

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

还是我忽略了什么?

Moh*_*hif 5

这两个功能背后的核心思想是相同的,即递归消除比另一个功能重要性低的功能。区别在于这两种方法是如何实现这一目标的。

sklearn.feature_selection.RFE只需训练一个将权重分配给要素的估计器。它根据该估计量得出特征的重要性,然后递归地对其进行修剪。

另一方面,通过交叉验证消除递归特征,将交叉验证添加到混合中。特征重要性得分的计算仅基于验证数据进行。根据数据的大小和使用的估算器,这可能是一个更耗资源的过程。

正如@Jan K所提到的,您可以使用ranking_属性获得功能排名

根据文档

support_:形状数组[n_features]

The mask of selected features.
Run Code Online (Sandbox Code Playgroud)

这将返回选定功能的布尔掩码,例如

array([ True,  True,  True,  True,  True,
    False, False, False, False, False], dtype=bool)
Run Code Online (Sandbox Code Playgroud)

rank_:形状数组[n_features]

特征等级,使得ranking_ [i]对应于第i个特征的等级位置。选定的(即最佳估计)功能被分配为等级1。

例如(来自官方文档示例

selector.ranking_
#output : array([1, 1, 1, 1, 1, 6, 4, 3, 2, 5])
Run Code Online (Sandbox Code Playgroud)

其中选择器是RFECV()对象

提价