我想知道Sklearn的RFECV是否可以选择固定数量的最重要功能。例如,在处理具有617个要素的数据集时,我一直试图使用RFECV来查看其中哪些要素中最重要的5个。但是,与RFE不同,RFECV没有参数'n_features_to_select'(这使我感到困惑)。我该如何处理?
答案 0 :(得分:2)
根据此quora post
RFECV对象有助于使用交叉验证来调整或找到此n_features参数。对于消除了“步骤”数量的特征的每个步骤,它都会根据验证数据计算分数。在验证数据上给出最高分的步骤中剩余的特征数被认为是数据的“最佳n_features”。
哪个表示RFECV确定了最佳特征数(n_features)以获得最佳结果。
拟合的RFECV
对象包含具有特征等级的属性ranking_
和support_
掩码,用于选择找到的最佳特征。
但是,如果您必须从RFECV中选择前n个功能,则可以使用ranking_
属性
optimal_features = X[:, selector.support_] # selector is a RFECV fitted object
n = 6 # to select top 6 features
feature_ranks = selector.ranking_ # selector is a RFECV fitted object
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]
答案 1 :(得分:0)
我知道这是一个老问题,但我认为它仍然相关。
我不认为 shanmuga 的解决方案是正确的,因为同一等级内的特征不是按重要性排序的。也就是说,如果 selector.ranking_
有 3 个等级为 1 的特征,我认为列表中的第一个特征不一定比第二个或第三个更重要。
这个问题的一个简单的解决方案是运行 RFE
,同时将 n_features_to_select
设置为所需的数字并“手动”交叉验证它。
如果你想从最优的 m 个特征中得到 n 个特征(n 您应该注意,多个特征可能具有相同的重要性或系数,您可能会在此方法中忽略这一点。# selector is a RFECV fitted object
feature_importance = selector.estimator_.feature_importances_ # or coef_
feature_importance_sorted = sorted(enumerate(feature_importance), key=lambda x: x[1])
top_n_idx = [idx for idx, _ in feature_importance_sorted[:n]]