快捷方式

torcheval.metrics.functional.multilabel_auprc

torcheval.metrics.functional.multilabel_auprc(input: Tensor, target: Tensor, num_labels: int | None = None, *, average: str | None = 'macro') Tensor

计算多标签分类的 AUPRC,也称为平均精确率,它是精确率-召回率曲线下的面积。其类版本为 torcheval.metrics.MultilabelAUPRC

精确率定义为 \(\frac{T_p}{T_p+F_p}\),它是模型预测为正例的样本中真正例的概率。召回率定义为 \(\frac{T_p}{T_p+F_n}\),它是真正例被模型预测为正例的概率。

精确率-召回率曲线将召回率绘制在 x 轴上,将精确率绘制在 y 轴上,两者都介于 0 和 1 之间。此函数返回该图下的面积。如果面积接近 1,则模型支持一个阈值,该阈值可以正确识别大部分真正例,同时拒绝足够的假例,以便大多数真实预测都是真正例。

在 AUPRC 的多标签版本中,输入和目标张量是二维的。每个张量的行与特定示例相关联,列与特定类别相关联。

对于目标张量,第 r 行第 c 列的条目(r 和 c 为 0 索引)如果第 r 个示例属于第 c 个类别,则为 1,否则为 0。对于输入张量,相同位置的条目是分类模型预测第 r 个示例是否包含在第 c 个类别的输出。请注意,在多标签设置中,多个标签可以应用于单个样本。这与多类别样本形成对比,在多类别样本中,可能存在两个以上的不同类别,但每个样本必须恰好有一个类别。

如果满足以下条件,则 N 个标签的多标签 auprc 的结果(无平均)等效于具有 N 个任务的二元 auprc:

  1. input 进行转置,在二元标签化中,示例与列相关联,而在多标签分类中,示例与行相关联。

  2. target 出于相同原因进行转置。

有关多标签和二元 AUPRC 之间关系的更多详细信息,请参见下面的示例。

参数:
  • input (Tensor) – 标签预测的张量,应为概率或 logits,形状为 (n_sample, n_label)。

  • target (Tensor) – 真实标签的张量,形状为 (n_samples, n_label)。

  • num_labels (int) – 标签数量。

  • average (str, optional) –

    • 'macro' [默认]

      分别计算每个类别的指标,并返回它们的未加权平均值。

    • None'none'

      分别计算每个类别的指标,并返回每个类别的指标。

示例:
>>> import torch
>>> from torcheval.metrics.functional import multilabel_auprc
>>> input = torch.tensor([[0.75, 0.05, 0.35], [0.45, 0.75, 0.05], [0.05, 0.55, 0.75], [0.05, 0.65, 0.05]])
>>> target = torch.tensor([[1, 0, 1], [0, 0, 0], [0, 1, 1], [1, 1, 1]])
>>> multilabel_auprc(input, target, num_labels=3, average=None)
tensor([0.7500, 0.5833, 0.9167])
>>> multilabel_auprc(input, target, average=None)
tensor([0.7500, 0.5833, 0.9167])
>>> multilabel_auprc(input, target, num_labels=3, average='macro')
tensor(0.7500)
>>> multilabel_auprc(input, target, num_labels=3)
tensor(0.7500)
>>> multilabel_auprc(input, target, average='macro')
tensor(0.7500)
>>> multilabel_auprc(input, target)
tensor(0.7500)

与 BinaryAUPRC 的连接 >>> input = torch.tensor([[0.1, 0, 0], [0, 1, 0], [0.1, 0.2, 0.7], [0, 0, 1]]) >>> target = torch.tensor([[1, 0, 0], [0, 1, 0], [0, 0, 1], [0, 0, 1]]) >>> multilabel_auprc(input, target) tensor([0.5000, 1.0000, 1.0000])

以上等效于 >>> from torcheval.metrics import BinaryAUPRC >>> input = torch.tensor([[0.1, 0, 0.1, 0], [0, 1, 0.2, 0], [0, 0, 0.7, 1]]) >>> target = torch.tensor([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 1]]) >>> binary_auprc(input, target, num_tasks=3) tensor([0.5000, 1.0000, 1.0000])

文档

访问 PyTorch 的全面开发者文档

查看文档

教程

获取针对初学者和高级开发人员的深入教程

查看教程

资源

查找开发资源并获得问题的解答

查看资源