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

使用scikit-learn MultinomialNB构建分类器:训练参数疑问

MultinomialNB.fit() 的第二个参数详解

嘿,我来帮你理清这个问题,顺便修正下代码里的小错误~

首先直接给你答案:你已经生成的 train['sentiment'] 就是对应教程里 twenty_train.target 的参数——它是每个训练样本对应的类别标签集合,必须和特征矩阵的样本数量一一对应。

具体解释

MultinomialNB.fit(X, y) 方法的两个核心参数:

  • X:特征矩阵,也就是你用 CountVectorizer 生成的文档-词频矩阵(你的代码里是 X_train_counts);
  • y:每个样本对应的分类标签,这里就是你通过评分转换得到的正负类标记(+1 或 -1)。

你通过这段代码生成的标签列完全符合要求:

df2['sentiment'] = df2['rating'].apply(lambda rating : +1 if rating > 3 else -1)

它把评分>3的评论标记为正类,其余为负类,刚好是朴素贝叶斯分类器需要的离散类别标签。

你的代码里需要修正的几个问题

我注意到代码里有几个拼写和变量定义的小错误,会导致运行报错,帮你修正后如下:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import time
import csv
import string
# 新版本sklearn中cross_validation已移到model_selection
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB

# 导入数据集
data = pd.read_csv("test.csv", quotechar='"', delimiter=',', quoting=csv.QUOTE_ALL, skipinitialspace=True, error_bad_lines=False)
df2 = data.set_index("name", drop=False)
df2['sentiment'] = df2['rating'].apply(lambda rating: +1 if rating > 3 else -1)

# 划分训练集和测试集
train, test = train_test_split(df2, test_size=0.2)

count_vect = CountVectorizer()
# 修正拼写错误:traintrain → train
X_train_counts = count_vect.fit_transform(train['review'])
# 修正拼写错误:testrain → test
test_matrix = count_vect.transform(test['review'])

# 修正未定义变量:X_train_tfidf → X_train_counts,传入正确的标签列
clf = MultinomialNB().fit(X_train_counts, train['sentiment'])

额外小提示

训练完模型后,你可以用以下代码验证效果:

# 得到测试集预测标签
predicted = clf.predict(test_matrix)
# 计算准确率
accuracy = np.mean(predicted == test['sentiment'])
print(f"模型准确率:{accuracy:.2f}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:16:28