You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用MultinomialNB遇ValueError:y应为一维数组问题求助

问题

手头有个已标注情感的推特数据集,想用标注的情感划分数据并训练模型。用train_test_split划分数据时正常,但训练MultinomialNB朴素贝叶斯模型时抛出错误:ValueError: y should be a 1d array, got an array of shape (295, 9) instead。试过修改test_size和random_state参数,仅改变了错误中的形状数值,问题仍未解决。

代码片段

训练测试集划分

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test  = train_test_split(text_tf, sentimen, test_size=0.78, random_state=0)

朴素贝叶斯训练

from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
clf = MultinomialNB()
clf.fit(X_train, y_train)
predicted = clf.predict(X_test)

print("MultinomialNB Accuracy:", accuracy_score(y_test,predicted))
报错信息
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-55-90624fc1891c> in <module>
      4 from sklearn.metrics import confusion_matrix
      5 clf = MultinomialNB()
----> 6 clf.fit(X_train, y_train)
      7 predicted = clf.predict(X_test)
      8 

5 frames
/usr/local/lib/python3.7/dist-packages/sklearn/utils/validation.py in column_or_1d(y, warn)
   1037 
   1038     raise ValueError(
-> 1039         "y should be a 1d array, got an array of shape {} instead.".format(shape)
   1040     )
   1041 

ValueError: y should be a 1d array, got an array of shape (295, 9) instead.
解决方案
  • 问题根源:sentimen是二维数组(多列数据),但MultinomialNB作为单标签分类模型,要求目标变量y必须是一维数组(仅一列标签)。
  • 修复操作:
    1. 检查sentimen的结构,确定哪一列是你需要的情感标签列。如果是DataFrame,直接选取该列:sentimen = df['你的标签列名']
    2. 若sentimen是numpy二维数组,转成一维:sentimen = sentimen.ravel() 或者 sentimen = sentimen.reshape(-1)
    3. 重新执行划分数据集和模型训练的代码即可。

内容的提问来源于stack exchange,提问作者Ardiansyah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 09:50:43