【问题标题】:How Can I Use Confusion Matrix With Naive Bayes in Python?如何在 Python 中使用带有朴素贝叶斯的混淆矩阵?
【发布时间】:2018-01-24 20:06:00
【问题描述】:

我想用 5 个类别的朴素贝叶斯分类器对许多句子进行分类,我可以做到,但我无法创建混淆矩阵。我研究了很多,但我找不到。这些是我的代码,请教我如何在这些代码上创建混淆矩阵:

nb_classifier = NaiveBayesClassifier.train(trainData)
print(accuracy(nb_classifier, testData))
#Output is 0.8152876648699048

print(nb_classifier.labels())
#Output is ['cat1', 'cat2', 'cat3', 'cat4', 'cat5']

【问题讨论】:

标签: python nlp nltk


【解决方案1】:

可能值得使用以下方式来构建分类器。混淆矩阵也包括在内。

from sklearn.naive_bayes import MultinomialNB # or any other NB model
from sklearn.metrics import accuracy_score
from sklearn.metrics import confusion_matrix

nb_classifier = MultinomialNB()

nb_classifier.fit(X_train, y_train)

y_pred = nb_classifier.predict(X_test)

acc_score = accuracy_score(y_test, y_pred)
conf_mat = confusion_matrix(
        y_test, y_pred, labels = ['cat1', 'cat2', 'cat3', 'cat4', 'cat5'])

print(acc_score)
print(conf_mat)

【讨论】:

  • 为什么我们必须使用 x_train 和 y_train,它们不能在同一个变量中吗?
  • 您要预测的标签属于您的因变量,其余数据由自变量组成。分类器分析自变量并尝试预测因变量中的标签。如果您在 X 中包含因变量,分类器可能会完全忽略所有其他变量,并确定唯一重要的变量是您尝试预测的变量。因此,您最终会将因变量与自身进行比较。
  • 我希望您已经意识到,为了计算混淆矩阵,您需要将一组已知标签 y_test 和一组预测标签 y_pred 传递给函数。后者是在您调用分类器的 .predict() 方法时计算的。
  • 这给了我一个错误,“float() 可以是字符串或 int,而不是 dict。我的数据是这样的 [{'look':true,'a':true,'bird ':true},'cat1']。我该怎么办?
  • 将y_test和y_pred以字符串列表的形式传递给confusion_matrix。例如,如果您有一个文章列表,并且想要构建一个分类器来预测文章所涉及的城市,那么您的 y 数据就是一个城市列表。然后分类器输出预测的城市标签,然后比较两个列表。如果 y 标签仅包含五个城市,则列表可能是 ['London'、'Paris'、'Berlin'、'Madrid'、'Stockholm'] 或您在训练和测试集中拥有的任何其他城市。跨度>
猜你喜欢
  • 2018-04-25
  • 2017-02-09
  • 2020-06-23
  • 2011-02-25
  • 2018-02-24
  • 2013-11-24
  • 2014-02-22
  • 2012-08-26
  • 2018-02-14
相关资源
最近更新 更多