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

Python训练好的朴素贝叶斯模型预测新数据报维度不匹配如何解决

错误原因

你遇到的ValueError: dimension mismatch是因为预测阶段错误地重新拟合了文本向量化器:

  • 训练阶段调用vectorizer.fit_transform()时,CountVectorizer已经基于训练集生成了固定的词表,训练好的朴素贝叶斯模型只能接受和该词表维度一致的特征输入
  • 预测阶段你重新实例化了CountVectorizer,并对测试集单独做了fit_transform(),此时生成的特征矩阵维度完全由测试集的词汇决定,和训练集的特征维度不匹配,因此调用模型预测时报错。
正确修改方案

预测阶段不要重新实例化和拟合向量化器,直接使用训练阶段已经拟合好的vectorizer,对测试集文本仅调用transform()方法做转换即可,修正后的代码如下:

import re # 补充:你原代码中normalize_text用到了re模块,需要先导入,否则会运行报错
# 新数据读取和文本归一化逻辑保持不变
test = pd.read_csv('testset.csv')
test['TEXT'] = [normalize_text(s) for s in test['respostas']]

# 仅用训练好的vectorizer做转换,不要重新fit也不要新建CountVectorizer实例
classes = vectorizer.transform(test['TEXT'])

classificacao = nb.predict(classes)
补充注意点
  • 如果测试集出现训练集里没有的生词,transform()方法会自动忽略这些词汇,不会影响特征维度的一致性
  • 如果你需要保存模型和向量化器后续离线使用,可以用joblib或pickle模块把训练好的nb和vectorizer一起序列化保存,加载后直接使用即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:45:08