您如何使用混淆矩阵计算精度和召回率?


92

我想知道如何针对多类分类问题使用混淆矩阵来计算精度和召回率。具体而言,只能将观察值分配给其最可能的类别/标签。我想计算:

  • 精度= TP /(TP + FP)
  • 召回率= TP /(TP + FN)

针对每个类别,然后计算微观平均F测度。


docx评估分类模型–精确度和召回率告诉我什么?来自Compumine的,提供了混淆矩阵及其衍生度量的简单介绍。它有助于创建混淆矩阵,精度,召回率,特异性和准确性。
Jayran Choopan

4
在这里找到答案。很好的说明youtube.com/watch?v=FAr2GmWNbT0

Compumine链接已死。
特伦顿

对于多类情况,据我了解,沿行(轴= 0)是召回率,沿列(轴= 1)是精度。rxnlp.com/...
MD ZIA ULLAH

Answers:


69

在2个假设的情况下,混淆矩阵通常为:

       | Declare H1  |  Declare H0 |
|Is H1 |    TP       |   FN        |
|Is H0 |    FP       |   TN        |

我在其中使用了与您的符号类似的内容:

  • TP =真正值(实际上是H1时声明H1),
  • FN =假阴性(实际上是H1时声明H0),
  • FP =假阳性
  • TN =真负

从原始数据来看,表中的值通常是测试数据中每次出现的次数。由此,您应该能够计算出所需的数量。

编辑

多类问题的一般化是对混淆矩阵的行/列求和。给定矩阵的方向如上所述,即矩阵的给定行对应于“真相”的特定值,我们具有:

Precision i=MiijMji

Recall i=MiijMij

也就是说,精度是事件中我们正确声明的事件在 算法声明的所有实例中所占的比例。相反,回想是在世界状况为的所有情况下我们正确声明的事件的一部分。iiii


1
在我的情况下,有10个以上的类,所以我想FN将意味着声明类H(i)的总数,i = 1;FP也一样吗?
daiyue 2013年

嗨,我想知道如果混淆矩阵中某个实际类别的TP + FP = 0,而TP + FN = 0,则Precision和Recall的值将是多少。
daiyue 2013年

i如果没有算法声明的实例,则class的精度是不确定的ii如果测试集不包含class ,则class的召回是不确定的i
戴夫

我的最终目标是计算宏F量度,因此我需要每个i的精度和召回值;因此,如果以上两种情况出现在某个类i中,我该如何计算Macro-F度量?特别是,Fi的值是多少,并且第i类算作M类之一,那么M中的元素数将作为计算宏F度量的公式的分母。
daiyue 2013年

1
对不起,您能否更清楚地说明您的想法?
daiyue 2013年

31

好的总结论文,着眼于这些指标,以解决多类问题:

  • Sokolova,M.和Lapalme,G.(2009)。对分类任务的绩效指标进行系统分析。 信息处理与管理,第45页,第41页。427-437。(pdf

摘要如下:

本文对机器学习分类任务的全部范围(即二进制,多类,多标签和分层)中使用的二十四种性能度量进行了系统分析。对于每个分类任务,研究将混淆矩阵中的一组更改与数据的特定特征相关联。然后,分析集中在不改变度量的混淆矩阵的更改类型上,因此保留分类器的评估(度量不变性)。结果是针对分类问题中所有相关标签分布变化的度量不变性分类法。形式上的不变性导致对分类器进行更可靠评估的应用示例支持了这种形式化分析。


2
欢迎使用该网站@JamesTaylor。您介意在链接的文件中提供信息摘要,以帮助读者确定是否需要它们,以防链接失效。
gung

8

使用sklearn和numpy:

from sklearn.metrics import confusion_matrix
import numpy as np

labels = ...
predictions = ...

cm = confusion_matrix(labels, predictions)
recall = np.diag(cm) / np.sum(cm, axis = 1)
precision = np.diag(cm) / np.sum(cm, axis = 0)

要获得精确度和召回率的总体衡量指标,请使用

np.mean(recall)
np.mean(precision)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.