在混淆矩阵中计算精度和召回率

新手上路,请多包涵

假设我有一个混淆矩阵,如下所示。如何计算精度和召回率?

在此处输入图像描述

在此处输入图像描述

原文由 vahideh 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 607
2 个回答

首先,您的矩阵是倒置的。你想安排你的标签,以便在对角线 [(0,0),(1,1),(2,2)] 上设置真阳性,这是你将使用从生成的混淆矩阵找到的安排sklearn 和其他软件包。

一旦我们按照正确的方向对事情进行了排序,我们就可以从 这个答案 中摘录一页并说:

  1. True Positives 在对角线上
  2. 误报是按列求和。没有对角线
  3. 假阴性是按行求和。没有对角线。

\ 然后我们从 sklearn 文档 中获取一些公式来提高精确度和召回率。并将其全部写入代码:

 import numpy as np
cm = np.array([[2,1,0], [3,4,5], [6,7,8]])
true_pos = np.diag(cm)
false_pos = np.sum(cm, axis=0) - true_pos
false_neg = np.sum(cm, axis=1) - true_pos

precision = np.sum(true_pos / (true_pos + false_pos))
recall = np.sum(true_pos / (true_pos + false_neg))

由于我们删除了真阳性来定义 false_positives/negatives 只是为了将它们添加回来……我们可以通过跳过几个步骤来进一步简化:

  true_pos = np.diag(cm)
 precision = np.sum(true_pos / np.sum(cm, axis=0))
 recall = np.sum(true_pos / np.sum(cm, axis=1))

原文由 PabTorre 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进