2016-11-23 104 views
1

我有一个带有一些句子(波斯语句子,标签,波斯语单词(标签),标签,英文单词(标签))的文件。英文单词显示每个句子的课程。这个文件有两个类,“激情”和“咸”。我用朴素贝叶斯算法分类句子,现在我必须计算精度和回忆。为此我必须制作一个混淆矩阵,但我不知道如何。我写了一小段代码,并假定“激情”是积极的群体,“咸”是消极的群体。该代码返回了这种情况下的输出。但是,如果我假设“咸”为正,“激情”为负,则这些数字与第一种情况完全不同,因此,当我想计算精确度和回忆时,我没有正确的答案。我应该分别计算tp,tn,fp和fn两个类别(一次是激情还是一次是咸味),然后计算平均值,然后根据这个平均值计算精度和召回率?为2类分类器做一个混淆矩阵

(HINT1:argmax是NB算法的输出,它是代码认可它的测试句子的标签 HINT2:我有一些其他的文件长度超过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

您应该使用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学习是为了与Python 2.7可以使用,但它可能是安全的使用这些功能,因为你已经构建的模型)。

此外,由于我看到您处于NLP域中,因此您可以使用nltk库提供的工具。我不是专家,但我想this应该是有用的。