使用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必须是一维数组(仅一列标签)。 - 修复操作:
- 检查
sentimen的结构,确定哪一列是你需要的情感标签列。如果是DataFrame,直接选取该列:sentimen = df['你的标签列名'] - 若
sentimen是numpy二维数组,转成一维:sentimen = sentimen.ravel()或者sentimen = sentimen.reshape(-1) - 重新执行划分数据集和模型训练的代码即可。
- 检查
内容的提问来源于stack exchange,提问作者Ardiansyah
相关产品推荐
相关产品推荐

