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

特征名称长度与特征数量不匹配报错及决策树可视化问题咨询

解决ValueError: Length of feature_names, 177 does not match number of features, 6

这个报错的核心逻辑非常清晰:你给export_graphviz的feature_names参数传错了值,导致特征名的数量和模型训练时用的特征总数不匹配。

为什么会出现这个问题?

你当前代码里写的是feature_names=X,这里的X是你的整个特征数据集(看起来它有177行或者177个元素被误当成了特征名),但export_graphviz的feature_names参数需要的是对应每个特征的名称列表/数组,长度必须和模型的特征数(这里是6)完全一致。

快速解决步骤

根据你的X数据类型,分两种情况修改代码:

情况1:X是Pandas DataFrame

如果你的特征数据是用DataFrame存储的,直接用X.columns就能拿到正确的特征名列表(长度应该正好是6):

dt = rf.estimators_[0]
dot_data = StringIO()
# 替换feature_names=X为X.columns
export_graphviz(dt, out_file=dot_data, feature_names=X.columns)
(graph, ) = graph_from_dot_data(dot_data.getvalue())
Image(graph.create_png())

情况2:X是NumPy数组

如果X是numpy数组(没有自带列名),你需要手动定义一个包含6个元素的特征名列表:

dt = rf.estimators_[0]
dot_data = StringIO()
# 手动定义和特征数匹配的名称列表
feature_names = ["特征1", "特征2", "特征3", "特征4", "特征5", "特征6"]
export_graphviz(dt, out_file=dot_data, feature_names=feature_names)
(graph, ) = graph_from_dot_data(dot_data.getvalue())
Image(graph.create_png())

额外验证建议

为了避免类似问题,你可以先打印一下特征名列表的长度,确认和模型特征数一致:

# 如果是DataFrame
print(len(X.columns))
# 如果是手动定义的列表
print(len(feature_names))
# 输出应该是6,和报错里的"number of features, 6"对应

另外要注意:如果你的随机森林是经过特征选择、降维等预处理后训练的,要确保特征名列表只包含实际被用来训练模型的那6个特征的名称,不要包含被剔除的特征。

内容的提问来源于stack exchange,提问作者Gesang Bekti Setyo Nugroho

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:01:30