python - 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的文档,您可以看到 score 函数的第一个输入是 NOT y_pred
but X
。因此,对 score 函数的调用应该是,
print("Accuracy: ", Mn.score(x_test,y_test))
self.predict(x_test)
将在函数内部自动调用score
。
文档应该始终是调试代码的第一种方法。
推荐阅读
- java - 查看在 Docker 容器内运行的 Java 进程中 CPU 消耗最高的线程
- java - 如何在非容器托管 JPA(Spring Boot 和 Websphere)中使用来自 JDNI 数据源的凭据
- python - Apache Airflow Broken DAG cryptography.utils.InterfaceNotImplemented:
- jestjs - TypeError: (0 , _storeGenerator.storeGenerator) 不是函数
- ios - 尝试呈现已经呈现的内容 - Stripe SwiftUI
- dataframe - 将 HTML 表格放入变量中
- angular - 在 Angular 中通过路由器状态传递数据是否安全?
- javascript - 如何仅在最后将queryString中的逗号分隔符转换为管道分隔符
- c# - 在 C# 中序列化 Json 列表对象的问题
- javascript - 如何在反应中过滤和合并两个数组