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

使用TF-IDF+KNN文本分类时遭遇维度不兼容错误求助

解决TF-IDF结合KNN文本分类时的维度不匹配问题

问题场景

用TF-IDF+KNN做文本分类,500条数据按450-50划分训练/测试集。训练流程如下:

  1. 拟合TF-IDF向量器并保存,转换训练数据为TF-IDF向量
word_vectorizer = TfidfVectorizer(
                        stop_words='english',
                        strip_accents='unicode',
                        token_pattern=r'\w{1,}',
                        analyzer='word',
                        ngram_range=(1, 1))

word_vectorizer.fit(X_train)
vfilename = 'vectorizer.joblib'
joblib.dump(word_vectorizer, vfilename)

_X_train = word_vectorizer.transform(X_train)
  1. 训练KNN模型并保存
classifier_algo.fit(_X_train, y_train)
filename = f'updated_{classifier_algo}_{class_name}_model.joblib'
model_hello = joblib.dump(classifier_algo, filename)

但测试加载向量器和模型后执行y_pred = model_hello.predict(_X_test)时,出现错误:

ValueError: Incompatible dimension for X and Y matrices: X.shape[1] == 289402 while Y.shape[1] == 303846

确认测试阶段未在测试集上调用fit,求解决方法。

解决方法

  • 确保向量器与模型是同一轮训练的产物
    多次训练后可能出现旧的向量器/模型文件未被覆盖,导致加载的向量器和模型对应的特征维度不匹配。重新执行完整训练流程:先拟合向量器→转换训练数据→训练模型→保存向量器和模型,覆盖旧文件,避免版本混乱。

  • 固定数据集划分的随机种子
    若划分数据时未设置random_state,每次拆分的训练集内容不同,会导致TF-IDF拟合出的特征数量变化。划分时添加固定随机种子保证数据一致性:

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1, random_state=42)
  • 修正模型文件名,避免命名混乱
    模型文件名用f'updated_{classifier_algo}_{class_name}_model.joblib'会导致文件名包含对象信息(如类名、内存地址),容易加载错误的模型文件。改用固定清晰的文件名,比如knn_tfidf_model.joblib,确保加载正确的模型。

  • 验证特征维度一致性
    在训练阶段打印print("训练集特征维度:", _X_train.shape[1]),测试阶段打印print("测试集特征维度:", _X_test.shape[1]),确认两者维度是否一致。若不一致,说明向量器和模型不配对,需重新生成并保存。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 22:55:34