我想知道是否可以使用Sklearn的RFECV来选择固定数量的最重要特征。例如,在处理一个包含617个特征的数据集时,我试图使用RFECV来查看这5个特征中哪些是最重要的。然而,与RFE不同的是,RFECV没有’n_features_to_select’参数,这让我感到困惑。我应该如何处理这个问题?
回答:
根据这个Quora帖子
RFECV对象通过交叉验证来调整或寻找这个n_features参数。在每次消除“step”数量的特征时,它会在验证数据上计算得分。在验证数据上得分最高的那一步剩余的特征数量,被认为是“最佳n_features”。
这表明RFECV决定了最佳的特征数量(n_features)以获得最佳结果。
拟合后的RFECV
对象包含一个ranking_
属性,用于特征排名,以及一个support_
掩码来选择找到的最优特征。
但是,如果你必须从RFECV中选择前n_features,你可以使用ranking_
属性
optimal_features = X[:, selector.support_] # selector是一个拟合后的RFECV对象n = 6 # 选择前6个特征feature_ranks = selector.ranking_ # selector是一个拟合后的RFECV对象feature_ranks_with_idx = enumerate(feature_ranks)sorted_ranks_with_idx = sorted(feature_ranks_with_idx, key=lambda x: x[1])top_n_idx = [idx for idx, rnk in sorted_ranks_with_idx[:n]]top_n_features = X[:5, top_n_idx]