【发布时间】:2020-02-23 20:56:36
【问题描述】:
我正在使用两个类别的数据集,2 和 4,其中 2 是正面类别,4 是负面类别(关于情绪分析)。
我有一组来自我的模型的预测和一组实际值。我需要确定每个类的 Precision 和 Recall(正负类的 P 和 R 分数)。
代码如下:
preds = [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 4, 4, 4, 4, 4, 2, 2, 4, 4, 4, 4, 2]
actuals = [2, 4, 2, 4, 2, 4, 2, 4, 4, 4, 2, 4, 4, 4, 2, 2, 4, 4, 2, 4, 4, 4, 4, 4, 4, 2]
true_pos = 0
true_neg = 0
false_pos = 0
false_neg = 0
for pred, act in zip(preds, actuals):
# 2 is positive, 4 is negative
if(pred == 2 & act == 2):
true_pos += 1
elif(pred == 4 & act == 4):
true_neg += 1
elif(pred == 2 & act == 4):
false_pos += 1
elif(pred == 4 & act == 2):
false_neg += 1
print("True Positive: ", true_pos)
print("True Negative: ", true_neg)
print("False Positive: ", false_neg)
print("False Negative: ", false_neg)
产量:
True Positive: 1
True Negative: 14
False Positive: 0
False Negative: 0
但是,我真的很纠结应该如何按班级计算这些指标。 This SO post 表示如何对整体执行此操作,但不是按类别。
理想情况下,我最终会得到如下输出:
Class 2 P Score: x
Class 2 R Score: x
Class 4 P Score: x
Class 4 R Score: x
但我不确定如何计算。
如何调整我当前的逻辑以使用上述数据检查每个班级的 Precision 和 Recall 分数?
【问题讨论】:
-
您能否显示您的确切样本输入和您想要的输出?
-
我对您所说的 样本输入 的含义感到困惑。我认为,这些将是实际标签和预测标签,它们由程序开始时的两个列表组成。期望的输出是每个类的 Precision 和 Recall 分数,但问题是不知道如何构建函数或逻辑来计算它。
-
我对你所说的“每个班级”的意思感到困惑。 “每个班级”到底是什么?你能显示“每个类”的示例输入吗?
-
一个类是一个标签...
preds或predicted class列表中的每个值都是一个类的预测。actuals是数据集的 ACTUAL 类的列表。这两个列表的存在是为了简化程序并提供最小的、完整的、可重复的样本。这相当于在输入数据集上运行 sklearn 的 train_test_split... -
是的,
confusion_matrix(preds, actuals).ravel()的sklearn链接是我真正需要的。从那里我可以很容易地计算公式。这就是我遇到的麻烦。谢谢! @ycx
标签: python python-3.x precision-recall