CountVectorizer+SGDClassifier预测时n_features不匹配的ValueError如何解决
问题原因
- 冗余代码:你训练模型的全流程没有用到预先定义的Keras Tokenizer,预测阶段添加的
tokenizer.fit_on_texts(test)、word_index = tokenizer.word_index属于无效代码,直接删除即可。 - 核心错误:你在预测阶段实际调用了
cv.fit_transform(test)(可从报错栈第9行确认),而CountVectorizer在训练时已经基于训练集学习到了固定的2494维词汇表,对测试样本重新fit会生成仅匹配单条测试数据的12维新词汇表,和模型要求的输入维度不匹配,触发报错。
修复方案
将预测代码修改为如下即可:
sentence="Drill was not in operation in the mine at the time of visit." test=preprocess_text(sentence) test=test.lower() test=[test] # 直接用训练好的CountVectorizer做特征转换,不要重新fit test1=cv.transform(test) output=sgd.predict(test1) print(output)
注意事项
- 所有特征预处理工具(CountVectorizer、TfidfTransformer等)都遵循「仅在训练集fit一次,训练和预测阶段统一调用transform做转换」的规则,禁止在测试、预测数据上调用fit或fit_transform,避免特征维度不匹配的问题。
- 如果你后续需要切换为基于Tokenizer的深度学习模型,再保留Tokenizer相关逻辑,同样需要保证Tokenizer仅在训练集上fit一次,预测阶段不要重复fit。
内容的提问来源于stack exchange,提问作者Chinmay Datar
相关产品推荐
相关产品推荐

