当我查看使用交叉验证的递归特征消除时,我在想sklearn.feature_selection.RFECV()的实际用途是什么。
实际上,它只返回最佳特征数量,但并没有告诉我这些特征具体是哪些。
相比之下,sklearn.feature_selection.RFE会返回rfe.ranking_
难道我不应该只使用sklearn.feature_selection.RFE
吗?
还是我忽略了什么?
回答:
这两个函数的核心思想是相同的,即递归地消除那些比其他特征重要性低的特征。它们的区别在于实现这一目标的方式不同。
sklearn.feature_selection.RFE简单地训练一个估计器来为特征分配权重。它基于该估计器提取特征的重要性,并递归地进行修剪。
而使用交叉验证的递归特征消除则在其中加入了交叉验证。特征重要性的得分计算仅基于验证数据进行。这可能是一个更耗资源的过程,具体取决于数据的大小和所使用的估计器。
正如@***提到的那样,您可以使用ranking_
属性来获取特征排名
根据文档
support_ : 形状为[n_features]的数组
选定特征的掩码。
这会返回一个类似于下面的选定特征的布尔掩码
array([ True, True, True, True, True, False, False, False, False, False], dtype=bool)
ranking_ : 形状为[n_features]的数组
特征排名,其中ranking_[i]对应于第i个特征的排名位置。选定的(即估计最佳的)特征被分配为1级别。
例如(来自官方文档示例)
selector.ranking_#output : array([1, 1, 1, 1, 1, 6, 4, 3, 2, 5])
其中selector是RFECV()对象
参考资料