【问题标题】:MultinomialNB fails with "ValueError: shapes not aligned" during prediction phaseMultinomialNB 在预测阶段失败并出现“ValueError:形状未对齐”
【发布时间】:2021-07-08 14:50:12
【问题描述】:

我正在尝试做一个 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 出现的唯一地方。

【问题讨论】:

  • 你能打印出形状而不是大小吗?另外,错误发生在哪一行?
  • y (86460,) x (86460, 5000) x_train (77814, 5000) y_train (77814,) x_test (8646, 5000) y_test (8646,) y_pred (8646,) 这些是形状.错误也出现在最后一行 print("Accuracy: ", Mn.score(y_pred.reshape(-1,1),y_test))

标签: python machine-learning nlp naivebayes multinomial


【解决方案1】:

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

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

self.predict(x_test) 将在函数score 中自动调用。

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

【讨论】:

    猜你喜欢
    • 2016-05-04
    • 2022-12-07
    • 1970-01-01
    • 2019-06-03
    • 2018-03-06
    • 2019-12-14
    • 1970-01-01
    • 2020-02-19
    • 1970-01-01
    相关资源
    最近更新 更多