我有一个带有一些句子的文件(一个波斯语句子,一个标签,一个波斯语单词(标签),一个标签,一个英文单词(标签))。英语单词显示每个句子的类。这个文件有2个类,“激情”和“咸”。我用朴素贝叶斯算法对句子进行了分类,现在我必须计算精度和召回率。为此,我必须制作一个混乱矩阵,但我不知道如何。我写了一个小代码,并假设“激情”是积极的群体而“咸”则是消极群体。代码返回了此案例的输出。但如果我认为“咸”为积极的,而“激情”为负,则数字与第一种情况完全不同,因此当我想计算精确度和召回时,我没有正确答案。我应该分别为2个类别计算tp,tn,fp和fn(一次用于激情,一次用于咸味),然后计算平均值,然后根据这个平均值计算精度和召回量?
(hint1:argmax是NB算法的输出,它是代码为测试句子识别它的标记。 提示2:我还有一些其他文件超过2个类)
#t = line.strip().split("\t")
if t[2] == "passion" and argmax == "passion":
tp += 1
elif t[2] == "passion" and argmax != "passion":
fn += 1
elif t[2] == "salty" and argmax != "salty":
fp += 1
elif t[2] == "salty" and argmax == "salty":
tn += 1
print ("tp", tp, "tn", tn, "fp", fp, "fn", fn)
答案 0 :(得分:0)
您应该使用scikit-learn,它已经提供了混淆矩阵和分类报告。样本:
from sklearn.metrics import confusion_matrix, classification_report
# suppose your predictions are stored in a variable called preds
# and the true values are stored in a variable called y
print(confusion_matrix(y, preds))
print(classification_report(y, preds))
(顺便说一句,scikit-learn旨在与python 2.7一起使用,但使用这些函数可能是安全的,因为你已经建立了模型)。