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

joblib加载DecisionTreeClassifier预测报特征数不匹配如何解决?

触发报错:ValueError:X has 271 features, but DecisionTreeClassifier is expecting 16046 features as input

错误根本原因

你在项目1训练模型时,用于文本向量化的CountVectorizer已经基于训练集文本拟合出了固定词汇表,对应16046个特征维度,而你只单独保存了决策树模型,没有保存配套的向量化器。在项目2中新初始化的CountVectorizer仅拟合了小批量的爬取Twitter数据,生成的词汇表仅对应271个特征,和模型训练时要求的输入维度不匹配,因此触发报错。

解决方案

方案1:导出配套的向量化器与模型(推荐,需可访问项目1的训练环境)

  • 回到项目1的训练代码中,同时保存拟合完成的向量化器和模型文件:
import joblib
# 替换为你实际的向量化器、模型变量名
joblib.dump(train_fit_vectorizer, "count_vectorizer.pkl")
joblib.dump(trained_dt_model, "decision_tree_clf.pkl")
  • 将两个pkl文件迁移到项目2后,直接加载已拟合的向量化器处理待预测文本,不要重新初始化向量化器:
import joblib
# 加载配套组件
vectorizer = joblib.load("count_vectorizer.pkl")
clf = joblib.load("decision_tree_clf.pkl")

# 对预处理完成的Twitter文本做向量化,仅调用transform,不要重新fit
X_input = vectorizer.transform(preprocessed_twitter_texts)
pred_result = clf.predict(X_input)

注意:绝对不要对加载后的向量化器调用fit或fit_transform方法,否则会覆盖原有词汇表,依旧会出现维度不匹配问题

方案2:无法访问项目1训练环境的临时方案

  • 拿到项目1训练模型时使用的全量训练文本,在项目2中用新初始化的CountVectorizer对全量训练文本做拟合,保证生成的词汇表和训练时完全一致,再使用该向量化器处理待预测的Twitter文本即可。
注意事项
  • 项目1和项目2的文本预处理逻辑必须完全统一(包括大小写转换、特殊字符清洗、停用词过滤、分词规则等),否则即使维度匹配,模型预测准确率也会大幅下降
  • 可以使用sklearn的Pipeline将向量化器和模型封装为一个pipeline对象,直接保存pipeline即可,无需分开存储两个文件,能进一步降低配套组件不匹配的概率。

内容的提问来源于stack exchange,提问作者HUI YONG LEE

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 21:06:06