首页 > 解决方案 > MultinomialNB 在预测阶段失败并出现“ValueError:形状未对齐”

问题描述

我正在尝试做一个 MultinomialNB()。我有一个 csv,我读入数据框(数据)并对数据进行了一些标记化和词形还原,以便获得最常用的单词。该模型的代码是这样的:

max_features = 5000
count_vectorizer = CountVectorizer(max_features=max_features , stop_words= "english") 
sparce_matrix = count_vectorizer.fit_transform(Tweet_list).toarray()
y = data.iloc[:,0].values
x = sparce_matrix

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)

from sklearn.naive_bayes import MultinomialNB

Mn = MultinomialNB()
Mn.fit(x_train, y_train)
y_pred = Mn.predict(x_test)
print("Accuracy: ", Mn.score(y_pred.reshape(-1,1),y_test))

当我打印变量的大小时:

print(y.size)
print(x.size)
print(x_train.size)
print(y_train.size)
print(x_test.size)
print("y test", y_test.size)
print("y pred", y_pred.size)

我得到:

86460
432300000
389070000
77814
43230000
y test 8646
y pred 8646

但是,模型因 ValueError 失败:形状 (8646,1) 和 (5000,2) 未对齐:1 (dim 1) != 5000 (dim 0)。

据我了解,问题出在计算中的某个地方,它在某些 np.dot(a, b) 失败的方法后面。它以某种方式使用最大特征向量 (5000) 大小的向量计算 y_pred 或 y_test (8646)。那是值 5000 出现的唯一地方。

标签: pythonmachine-learningnlpnaivebayesmultinomial

解决方案


如果您参考MultinomialNB的文档,您可以看到 score 函数的第一个输入是 NOT y_predbut X。因此,对 score 函数的调用应该是,

print("Accuracy: ", Mn.score(x_test,y_test))

self.predict(x_test)将在函数内部自动调用score

文档应该始终是调试代码的第一种方法。


推荐阅读