在Python中如何将混淆矩阵与朴素贝叶斯结合使用?

在Python中如何将混淆矩阵与朴素贝叶斯结合使用?,python,nlp,nltk,Python,Nlp,Nltk,我想用5个类别的朴素贝叶斯分类器对许多句子进行分类,我可以做到,但我不能创建混淆矩阵。我研究了很多,但没有找到。这些是我的代码,请教我如何在这些代码上创建混淆矩阵: nb_classifier = NaiveBayesClassifier.train(trainData) print(accuracy(nb_classifier, testData)) #Output is 0.8152876648699048 print(nb_classifier.labels()) #Output is

我想用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']

使用以下方法来构建分类器可能是值得的。还包括混淆矩阵

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_序列和y_序列,它们不能在同一个变量中吗?您要预测的标签属于您的因变量,其余数据由自变量组成。分类器分析自变量并尝试预测因变量中的标签。如果在X中包含因变量,分类器可能会完全忽略所有其他变量,并确定唯一重要的变量是您试图预测的变量。因此,您将最终将因变量与自身进行比较。我希望您已经意识到,为了计算混淆矩阵,您需要向函数传递一组已知标签y_test和一组预测标签y_pred。后者是在调用分类器的.predict()方法时计算出来的。这给了我一个错误,“float()可以是字符串或int,而不是dict。我的数据是这样的[{'look':true,'a':true,'bird':true},'cat1']。我该怎么办?以字符串列表的形式将y_test和y_pred传递到混淆矩阵。例如,如果您有一个文章列表,并希望构建一个分类器,该分类器预测该城市,则该文章关于您的y数据是一个城市列表。然后该分类器将预测的城市标签显示出来,然后您将两个列表进行比较。如果y标签只包含五个城市,然后列表可以是[‘伦敦’、‘巴黎’、‘柏林’、‘马德里’、‘斯德哥尔摩’]或培训和测试集中的任何其他城市。