微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MultinomialNB 在预测阶段因“ValueError:形状未对齐”而失败

如何解决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 出现的唯一地方。

解决方法

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

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

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

文档应该始终是调试代码的首选方法。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。