使用随机森林递归特征消除(RFE)获取特征名称报错及方案验证咨询
解决RFE特征选择中获取选中特征名称的问题
你的方案是完全正确的,原因如下:
- 使用
train_test_split拆分数据集时,只要没有人为调整特征顺序,X_train(numpy数组)的特征顺序和原始特征DataFrame(X_new)的特征顺序完全一致。 - RFE的
rfe.support_返回的布尔数组,是按照原始特征输入顺序标记每个特征是否被选中的,因此直接用X_new.columns[rfe.support_]就能精准提取选中的特征名称。
修正后的代码示例:
from sklearn.feature_selection import RFE from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split import pandas as pd # 假设X_new是预处理后的特征DataFrame,y是标签列 # X_new = pd.DataFrame(...) # y = ... # 拆分数据集,特征顺序与X_new保持一致 X_train, X_test, y_train, y_test = train_test_split(X_new, y, test_size=0.2, random_state=42) # 初始化RFE与随机森林分类器 clf_rf_3 = RandomForestClassifier() rfe = RFE(estimator=clf_rf_3, n_features_to_select=6, step=1) rfe.fit(X_train, y_train) # 获取选中的特征名称 selected_features = X_new.columns[rfe.support_] print('Chosen best 6 features by RFE:', selected_features)
注意事项:
- 代码中
n_features_to_select=6和打印语句的描述要统一,避免混淆。 - 确保预处理过程中没有打乱特征顺序(比如重排列、删除后新增列等),如果有这类操作,建议提前保存原始特征名列表(如
original_features = X_new.columns.tolist()),再用该列表结合rfe.support_筛选。
内容的提问来源于stack exchange,提问作者limbalu
相关产品推荐
相关产品推荐

