如何从RFE Pipeline中获取support_属性及保留的特征名称?
报错根因
你当前访问的是未经拟合的原始Pipeline模板中的RFE对象,support_是RFE执行fit()完成特征选择后才会生成的属性,未训练的RFE实例自然不存在该属性。RandomizedSearchCV在参数搜索过程中会反复克隆你传入的原始rf_clf_pl管道做交叉验证训练,搜索完成后最优参数下拟合完成的完整管道存储在rs.best_estimator_属性中,你直接读取原始未训练的rf_clf_pl当然拿不到训练结果。
另外你的代码存在一处导入笔误需要修正:sklearn.esemble_learning是错误模块路径,正确导入语句为from sklearn.ensemble import RandomForestClassifier,否则会先触发导入报错。
正确获取RFE保留特征名称的方法
按如下步骤操作即可:
- 从训练完成的随机搜索对象中取出最优拟合管道
best_pipeline = rs.best_estimator_
- 从最优管道中取出已拟合完成的RFE对象,读取特征选择布尔掩码
fitted_rfe = best_pipeline.named_steps["rfe"] selected_mask = fitted_rfe.support_
- 匹配原始特征名,得到RFE最终保留的特征列表
若训练特征smote_X_train为pandas DataFrame格式,直接用掩码筛选列名即可:
若训练特征为numpy数组格式,提前按输入顺序保存原始特征名列表,再用相同掩码做筛选即可。selected_feature_names = smote_X_train.columns[selected_mask].tolist()
内容的提问来源于stack exchange,提问作者Zero
相关产品推荐
相关产品推荐

