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

如何从含特征选择的GridSearchCV流水线中提取特征并导出决策树

报错原因说明

export_graphviz要求传入训练完成的决策树分类器实例,你传入的GridSearchCV是调参容器,本身不是决策树模型,自然没有n_features_属性。

1. 获取feature_selection筛选后的特征列名

首先确认原始特征名来源:

  • 若输入X是Pandas的DataFrame,原始特征名直接取X.columns.tolist()即可
  • 若X是numpy数组,手动替换为你自定义的特征名列表
    之后从最优流水线中提取筛选掩码,过滤得到选中的特征名:
# 获取拟合完成的最优流水线
best_pipeline = grid.best_estimator_
# 提取特征选择器实例
selector = best_pipeline.named_steps['feature_selection']
# 原始特征名,非DataFrame输入请自行替换为自定义特征列表
original_features = X.columns.tolist()
# 用get_support()返回的布尔掩码筛选选中的特征
selected_features = [feat for feat, is_selected in zip(original_features, selector.get_support()) if is_selected]

2. 正确导出训练好的决策树

从最优流水线中提取训练完成的决策树实例,传入export_graphviz即可:

from io import StringIO
from sklearn.tree import export_graphviz

# 提取最优决策树模型
best_tree = best_pipeline.named_steps['dec_tree']

dot_data = StringIO()
export_graphviz(best_tree, 
                out_file=dot_data,  
                filled=True, 
                rounded=True,
                special_characters=True,
                feature_names = selected_features,
                class_names=['0','1'])

额外注意项

你定义的参数字典存在重复键问题:

parameteres = {'dec_tree__max_depth':[list(range(1,X.shape[1]+1,1))],
                      'dec_tree__criterion':['gini', 'entropy'],
                      'dec_tree__max_depth':[2,4,6,8,10,12]}

同一个键dec_tree__max_depth定义了两次,后面的[2,4,6,8,10,12]会覆盖前面的无效定义,建议删除重复行避免后续出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:36:04