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

训练MultinomialNB遇ValueError: bad input shape (10,2),求正确语法

解决CountVectorizer + MultinomialNB训练时的ValueError问题

嘿,这个错误我太熟悉了!问题出在标签数据的形状不对——MultinomialNB要求传入的标签是一维数组,但你的标签大概率是二维的(比如不小心保留了元组结构或者拆分数据时没处理好),才会报ValueError: bad input shape (10, 2)。

下面是正确的实现步骤和完整代码:

核心步骤说明

  • 拆分数据:必须把训练数据里的文本和标签分开,标签要做成一维列表/数组
  • 特征转换:用CountVectorizer把文本转换成数值特征矩阵
  • 模型训练:确保传给MultinomialNB的标签是一维结构

完整可运行代码

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB

# 你的训练数据集
train = [
    ('I love this sandwich.', 'pos'),
    ('This is an amazing place!', 'pos'),
    ('I feel very good about these beers.', 'pos'),
    ('This is my best work.', 'pos'),
    ('What an awesome view', 'pos'),
    ('I do not like this restaurant', 'neg'),
    ('I am tired of this stuff.', 'neg'),
    ("I can't deal with this.", 'neg'),
    ('He is my sworn enemy!.', 'neg'),
    # 可继续添加更多样本
]

# 关键操作:拆分文本特征与分类标签,得到一维标签列表
X_train = [text for text, label in train]  # 所有文本内容
y_train = [label for text, label in train]  # 对应的标签,是一维结构

# 初始化CountVectorizer并完成文本到特征矩阵的转换
vectorizer = CountVectorizer()
X_train_vectorized = vectorizer.fit_transform(X_train)

# 训练MultinomialNB分类器
classifier = MultinomialNB()
classifier.fit(X_train_vectorized, y_train)

# 可选:测试模型效果
test_sample = ["I can't stand this boring movie"]
test_vectorized = vectorizer.transform(test_sample)
print(classifier.predict(test_vectorized))  # 预期输出:['neg']

错误原因复盘

你之前出错的核心问题是:传给MultinomialNB.fit()的标签数据是二维的(比如直接传入了原train列表的元组部分,或者拆分时错误地保留了二维结构),而模型要求标签必须是一维数组/列表(形状为(n_samples,),而非(n_samples, 2))。上面的代码通过列表推导式拆分数据,完美解决了这个形状不匹配的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:06:24