def mult_l(): text = [] data = pd.read_csv('D:/library/文本分类/train.csv', encoding='utf-8') tfidf = TfidfVectorizer(norm='l2', ngram_range=(1, 2)) features = tfidf.fit_transform(data.word) # print(tfidf.get_feature_names()) # print(features.toarray()) list_dir_test = os.listdir('D:/library/文本分类/test/') for t in list_dir_test: with open('D:/library/文本分类/test/'+t, 'r', encoding='utf-8') as f: format_sec = f.read() text.append(format_sec) features1 = tfidf.transform(text) clf = joblib.load( 'D:/library/fenci/MultinomialNB_classify.pkl') # 将模型存储在变量clf_load中 cat_id_df = data[['id', 'id_style']].drop_duplicates( ).sort_values('id_style').reset_index(drop=True) cat_to_id = dict(cat_id_df.values) id_to_cat = dict(cat_id_df[['id_style', 'id']].values) pred_cat_id = clf.predict(features1) # print(pred_cat_id) print('测试集文件:', 'D:/library/fenci/test_1/' + t, '预测类别:', id_to_cat[pred_cat_id[0]]) text.clear() if name == "main": mult_l()报错为ValueError: X has 326125 features, but MultinomialNB is expecting 59079 features as input.
时间: 2023-06-18 20:07:43 浏览: 148
这个错误是因为你在测试集上使用的特征向量(features1)的维度与训练集上使用的特征向量(features)的维度不同。在训练过程中,你使用了TfidfVectorizer来提取特征向量,但是在测试集上你又重新使用了TfidfVectorizer来提取特征向量,这导致了特征向量的维度不同。
解决方法是在测试集上使用与训练集相同的TfidfVectorizer来提取特征向量,可以在训练集上先拟合TfidfVectorizer,然后在测试集上使用拟合好的TfidfVectorizer来提取特征向量。可以像下面这样修改代码:
```
def mult_l():
text = []
data = pd.read_csv('D:/library/文本分类/train.csv', encoding='utf-8')
tfidf = TfidfVectorizer(norm='l2', ngram_range=(1, 2))
features = tfidf.fit_transform(data.word)
# print(tfidf.get_feature_names())
# print(features.toarray())
clf = joblib.load('D:/library/fenci/MultinomialNB_classify.pkl')
# 将模型存储在变量clf_load中
cat_id_df = data[['id', 'id_style']].drop_duplicates().sort_values('id_style').reset_index(drop=True)
cat_to_id = dict(cat_id_df.values)
id_to_cat = dict(cat_id_df[['id_style', 'id']].values)
list_dir_test = os.listdir('D:/library/文本分类/test/')
for t in list_dir_test:
with open('D:/library/文本分类/test/'+t, 'r', encoding='utf-8') as f:
format_sec = f.read()
text.append(format_sec)
features1 = tfidf.transform(text)
pred_cat_id = clf.predict(features1)
# print(pred_cat_id)
print('测试集文件:', 'D:/library/fenci/test_1/' + t, '预测类别:', id_to_cat[pred_cat_id[0]])
text.clear()
if __name__ == "__main__":
mult_l()
```
这样就可以避免特征向量维度不匹配的错误了。
阅读全文