You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法打印Pipeline中SequentialFeatureSelector选择的特征求助

问题解决:获取网格搜索后SequentialFeatureSelector选中的最优特征

问题原因

你遇到的报错核心原因:

  • 你设置了GridSearchCV(refit=False),网格搜索完成后不会用最优参数重新拟合整个数据集,你定义的原始pipe对象从未被实际拟合,自然不存在support_属性。
  • 即便后续修改refit=True,拟合后的最优模型也不是原始pipe,而是存储在GridSearchCV的best_estimator_属性中。

解决方案

步骤1:调整GridSearchCV的refit参数

将refit设为True,让网格搜索自动用最优参数拟合全量数据集:

gs = GridSearchCV(estimator=pipe,
                  param_grid=param_grid,
                  scoring=custom_scorer,
                  n_jobs=-1,
                  cv=cv,
                  refit=True)  # 修改此处为True
gs.fit(X, y)

步骤2:从最优模型中提取特征选择结果

从gs.best_estimator_中获取拟合完成的SequentialFeatureSelector实例,再提取选中的特征:

# 获取最优模型中的特征选择组件
best_sfs = gs.best_estimator_.named_steps['sfs']

# 获取选中特征的掩码
selected_mask = best_sfs.support_
# 也可以用get_support()方法,效果完全一致
# selected_mask = best_sfs.get_support()

# 如果特征有列名,直接提取特征名称
selected_features = X.columns[selected_mask]
print("选中的最优特征:", selected_features)

补充:若必须使用refit=False

如果因数据量等原因不想重新拟合全量数据,可从cv_results_中提取最优参数,手动初始化并拟合管道:

# 找到最优参数对应的索引
best_idx = gs.best_index_
best_params = gs.cv_results_['params'][best_idx]

# 初始化新管道并设置最优参数
new_pipe = Pipeline([('sfs', sfs), ('knn', knn)])
new_pipe.set_params(**best_params)

# 拟合管道
new_pipe.fit(X, y)

# 提取选中特征
selected_mask = new_pipe.named_steps['sfs'].support_
selected_features = X.columns[selected_mask]
print(selected_features)

内容的提问来源于stack exchange,提问作者Tomward Matthias

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 15:24:24