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

Pandas构建CART模型遇ValueError:特征名称与数量不匹配

CART模型特征名长度不匹配问题:错误分析与解决方案

错误含义

ValueError: Length of feature_names, 5 does not match number of features, 4 这个报错的核心是:你给模型指定的特征名称列表长度是5,但实际传入模型训练的特征数据只有4个维度,两者数量不对应,模型无法将每个特征和名称一一匹配,因此触发错误。

结合你的场景——原本计划只用Age、Monthly Charge两个特征预测Customer Status,说明代码里要么特征选多了,要么特征名称列表写多了元素。

解决方案

1. 核对特征数量与特征名列表的一致性

  • 先确认实际传入模型的特征数量:执行print(X.shape[1]),如果你要的是2个特征,这里应该输出2;如果输出4,说明你不小心选了4列特征。
  • 调整feature_names列表,让它的长度和X的特征维度完全一致。比如正确的特征名列表应该是['Age', 'Monthly Charge'],或者直接用数据列名避免手动输入错误:
    feature_names = X.columns.tolist()
    

2. 修正特征选择逻辑

检查提取特征的代码,确保只保留你需要的两列,避免多选:

# 正确提取目标特征
X = new_df[['Age', 'Monthly Charge']]
y = new_df['Customer Status']

3. 绘制决策树时的检查

如果是在可视化决策树时触发的错误,要确保传入plot_tree的feature_names和训练模型用的特征数量一致:

from sklearn.tree import DecisionTreeClassifier, plot_tree
import matplotlib.pyplot as plt

# 训练CART模型
clf = DecisionTreeClassifier()
clf.fit(X, y)

# 可视化时用正确的特征名
plt.figure(figsize=(12, 8))
plot_tree(clf, feature_names=X.columns.tolist(), class_names=clf.classes_, filled=True)
plt.show()

常见错误原因

  • 手动写feature_names时多打了元素,或者漏写了,导致长度不匹配。
  • 特征选择时复制粘贴列名,不小心带了多余的列。
  • 数据预处理(比如独热编码)生成了额外特征,但没同步更新feature_names。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 09:27:21