为具有2个类

时间:2016-11-23 20:48:00

标签: python-3.x nlp confusion-matrix

我有一个带有一些句子的文件(一个波斯语句子,一个标签,一个波斯语单词(标签),一个标签,一个英文单词(标签))。英语单词显示每个句子的类。这个文件有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)

1 个答案:

答案 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一起使用,但使用这些函数可能是安全的,因为你已经建立了模型)。

此外,由于我发现您处于NLP域中,因此您可以使用nltk库提供的功能。我不是专家,但我认为this应该是有用的。