精确/召回多类多标签分类
classification
machine-learning
5
0

我想知道如何为多类多标签分类(即具有两个以上标签的分类以及每个实例可以有多个标签的分类)计算精度和召回率?

参考资料:
Stack Overflow
收藏
评论
共 4 个回答
高赞 时间 活跃

在python中使用sklearnnumpy

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)
收藏
评论
  • 让我们假设我们有一个带有标签A,B和C的3类多分类问题。
  • 首先要做的是生成一个混淆矩阵。请注意,对角线中的值始终为正值(TP)。
  • 现在,要计算标签A的召回率 ,您可以从混淆矩阵中读取值并进行以下计算:

     = TP_A/(TP_A+FN_A) = TP_A/(Total gold labels for A) 
  • 现在,让我们计算标签A的精度 ,您可以从混淆矩阵中读取值并进行计算:

     = TP_A/(TP_A+FP_A) = TP_A/(Total predicted as A) 
  • 您只需要对其余的标签B和C进行相同的操作。这适用于任何多类分类问题。

是完整的文章,讨论如何计算精度和召回任何多类分类问题,包括示例。

收藏
评论

答案是,您必须计算每个类别的精度和召回率,然后将它们平均在一起。例如,如果您对A,B和C进行分类,则精度为:

(precision(A) + precision(B) + precision(C)) / 3

召回相同。

我不是专家,但这是我根据以下来源确定的:

https://list.scms.waikato.ac.nz/pipermail/wekalist/2011-March/051575.html http://stats.stackexchange.com/questions/21551/how-to-compute-precision-recall-for -multiclass-multilabel-classification

收藏
评论

对于多标签分类,您有两种方法。首先考虑以下几点。

  • $ n $是示例数。
  • $ Y_i $是地面真相标签的分配$ i ^ {th} $例..
  • $ x_i $是个$ i ^ {th} $例。
  • $ h(x_i)$是预测的标签$ i ^ {th} $例。

基于示例

指标以每个数据点的方式计算。对于每个预测标签,仅计算其得分,然后将这些得分汇总到所有数据点上。

  • 精度= $ \ frac {1} {n} \ sum_ {i = 1} ^ {n} \ frac {| Y_ {i} \ cap h(x_ {i})|} {| h(x_ {i})|} $ ,预测的正确率之比。分子发现预测向量中有多少个标签与基本事实有共同点,并且比率计算实际有多少个预测真实标签在基本事实中。
  • 召回= $ \ frac {1} {n} \ sum_ {i = 1} ^ {n} \ frac {| Y_ {i} \ cap h(x_ {i})|} {| Y_ {i} |} $ ,预测了多少实际标签的比率。分子找到预测向量中与地面实数有共同点的标记(如上所述),然后找到与实际标记数的比率,从而得到预测的实际标记的比例。

还有其他指标。

基于标签

在这里,事情是按标签进行的。对于每个标签,计算指标(例如,精度,召回率),然后将这些基于标签的指标进行汇总。因此,在这种情况下,最终要像对二进制分类(每个标签都有一个二进制赋值)那样,对整个数据集上的每个标签计算精度/召回率,然后对其进行汇总。

简单的方法是呈现一般形式。

这只是标准多类等效项的扩展。

  • 宏平均$ \ frac {1} {q} \ sum_ {j = 1} ^ {q} B(TP_ {j},FP_ {j},TN_ {j},FN_ {j})$

  • 微平均$ B(\ sum_ {j = 1} ^ {q} TP_ {j},\ sum_ {j = 1} ^ {q} FP_ {j},\ sum_ {j = 1} ^ {q} TN_ {j} ,\ sum_ {j = 1} ^ {q} FN_ {j})$

在这里$ TP_ {j},FP_ {j},TN_ {j},FN_ {j} $分别是仅对的真阳性,假阳性,真阴性和假阴性计数$ j ^ {th} $ 标签

$ B $代表任何基于混淆矩阵的指标。在您的情况下,您将插入标准精度并调用公式。对于宏观平均值,您传递每个标签计数,然后求和;对于微观平均值,您首先对计数取平均值,然后应用度量函数。

您可能有兴趣在这里查看多标签度量的代码,该代码是R中的mldr软件包的一部分。另外,您可能有兴趣研究Java多标签库MULAN

这是一篇介绍不同指标的好论文: 多标签学习算法综述

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号