python调用sklearn中朴素贝叶斯踩坑

  调用结构:

from sklearn.naive_bayes import MultinomialNB     # 从sklean.naive_bayes里导入朴素贝叶斯模型
from sklearn.feature_extraction.text import CountVectorizer  # 从sklearn.feature_extraction.text里导入文本特征向量化模块

# change_X_train是训练集样本,change_Y_train是训练集标签
# 这里面的change_X_train和,change_Y_train必须是str类型的列表
vec = CountVectorizer(analyzer = 'char', lowercase=False)
X_train = vec.fit_transform(change_X_train)
X_test = vec.transform(change_X_test)

#3.使用朴素贝叶斯进行训练
mnb = MultinomialNB()   # 使用默认配置初始化朴素贝叶斯
mnb.fit(X_train, y_train)    # 利用训练数据对模型参数进行估计
y_predict = mnb.predict(X_test)     # 对参数进行预测

#4.获取结果报告
print ('The Accuracy of Naive Bayes Classifier is:', mnb.score(X_test, y_test))

相关报错一:AttributeError:‘numpy.ndarray’ object has no attribute ‘lower’
  这个报错是因为数据类型是,numpy下的array类型,需要使用tolist()函数将变量变成list型。一般是标准化后变成了ndarray,也可取消标准化

相关报错二:‘list’ object has no attribute ‘lower’
  这个报错是因为sklearn中的朴素贝叶斯训练数据集必须是[‘1 1 1’, ‘2 2 2’, …, ’ n n n’]这种每项数据类型是str的列表。将所有的数据换成str就好了

相关报错三:ValueError: empty vocabulary; perhaps the documents only contain stop words
  这个报错是CountVectorizer参数设置的问题,不能使用默认配置

不能是:vec = CountVectorizer()
需要是:vec = CountVectorizer(analyzer = 'char', lowercase=False)

Guess you like

Origin blog.csdn.net/gls_nuaa/article/details/118444864