You need to enable JavaScript to run this app. 使用Graphviz可视化随机森林决策树并展示特征与类别名称
优惠活动
大模型
产品
解决方案
定价
更多

使用Graphviz可视化随机森林决策树并展示特征与类别名称

问题根因

你遇到的索引错误确实由特征维度不匹配导致:你传入的feature_names是原始DataFrame的25个列名,但随机森林分类器接收的是ColumnTransformer做独热编码后生成的155个特征,二者长度不一致,读取特征名时触发索引越界。

解决方法

你只需要替换特征名列表的生成逻辑,从训练完成的流水线中提取编码后的完整特征名即可,步骤如下:

  • 从最优Pipeline中提取ColumnTransformer对象,调用内置方法获取编码后的所有特征名
  • 保持类别名、绘图逻辑不变,将新的特征名列表传入plot_tree即可

修改后的完整代码如下:

# 获取ColumnTransformer编码后的完整特征名,替换原有原始列名
fn = rscv_rf.best_estimator_.named_steps['ct'].get_feature_names_out()
# 类别名无需修改
cn= [str(s) for s in y.unique()]

fig, axes = plt.subplots(nrows = 1,ncols = 5,figsize = (5,5), dpi=800)
for index in range(0, 5):
    tree.plot_tree(rscv_rf.best_estimator_.named_steps['clf'].estimators_[index], 
                   feature_names = fn, 
                   class_names = cn, 
                   filled = True,
                   ax = axes[index])
axes[index].set_title('Estimator: ' + str(index), fontsize = 11)
fig.savefig('rf_5trees.png')
注意事项
  • 如果你使用的sklearn版本低于1.0.0,get_feature_names_out()方法不可用,可替换为get_feature_names()方法
  • 生成的树图中特征名会自动匹配独热编码后的格式,比如原始分类特征city会生成city_北京、city_上海等编码后特征名,和模型实际使用的特征完全对应

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 00:54:03