我正在尝试对文本数据的类别进行预测,其中之一是朴素贝叶斯。训练数据包含7个类别,802个数据点。与 SMOTE 平衡后,所有 7 个类别现在有 134 个数据点,总共 938 个。
训练数据:
df_train['Categories'].value_counts()
Category 1 134
Category 2 130
Category 3 128
Category 4 106
Category 5 103
Category 6 101
Category 7 100
X = df_train['Element']
y = df_train['Categories']
count_vect = CountVectorizer(ngram_range=(1,2))
X_vect = count_vect.fit_transform(X)
print(X_vect.shape)
X_res, y_res = sm.fit_resample(X_vect, y)
print(X_res.shape)
(802, 747)
(938, 747)
我要预测的测试数据包含 46 个文本元素,这些元素矢量化为 280 个特征。
df_test_bagofwords = count_vect.transform(df_test['Elements'])
print(df_test_bagofwords.shape)
(46, 280)
mnb = MultinomialNB().fit(X_res, y_res)
mnb_pred = mnb.predict(df_test_bagofwords)
ValueError: dimension mismatch
当尝试使用 SVM 进行相同操作时,我会得到更多信息:
ValueError: X.shape[1] = 280 should be equal to 747, the number of features at training time
我认为 count_vect.transform() 会将测试数据拟合到矢量化和拟合的训练数据。但是这个错误是一致的。