如何获取RFECV中每个_grid_score对应特征子集的特征索引
RFECV获取不同大小特征子集索引的方法
方法1:重新拟合RFE(最稳妥,100%匹配得分对应子集)
RFECV最终返回的ranking_属性仅记录了递归到最优特征数过程中的特征淘汰顺序,低于最优特征数的淘汰顺序不会在ranking_中体现,最稳妥的方法是使用和RFECV完全相同的基模型、step参数,初始化RFE对象指定目标特征数,拟合后直接获取索引:
import numpy as np from sklearn.feature_selection import RFE # 复用训练RFECV时的基估计器 base_estimator = rfecv.estimator_ # 获取4个特征对应的索引 rfe_4 = RFE(estimator=base_estimator, n_features_to_select=4, step=rfecv.step) rfe_4.fit(X, y) # X、y为训练RFECV时使用的相同特征矩阵和标签 feature_4_idx = np.where(rfe_4.get_support())[0] # 获取3个特征对应的索引 rfe_3 = RFE(estimator=base_estimator, n_features_to_select=3, step=rfecv.step) rfe_3.fit(X, y) feature_3_idx = np.where(rfe_3.get_support())[0]
该方法得到的特征子集和你提到的_grid_score(scikit-learn官方属性为grid_scores_,0.22+版本替换为cv_results_['mean_test_score'])中对应特征数的得分完全匹配。
方法2:基于ranking_快速筛选(仅适用于特征数≥最优特征数的场景)
如果需要获取的特征数≥最优特征数,可直接通过ranking_筛选:ranking_数值越小特征越重要,rank=1为最优子集特征,rank=n对应第n-1轮淘汰的特征,保留所有ranking_ ≤ (总特征数 - 目标特征数 + 1)的特征即可得到对应子集。
内容的提问来源于stack exchange,提问作者Rana
相关产品推荐
相关产品推荐

