Shortcuts

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列(r和c从0开始索引)的条目为1,否则为0。对于输入张量,相同位置的条目是分类模型预测第r个示例是否包含在第c类中的输出。 请注意,在多标签设置中,允许多个标签应用于单个样本。这与多类样本形成对比,在多类样本中,可能有超过2个不同的类别,但每个样本必须恰好属于一个类别。

如果不进行平均,N标签多标签auprc的结果等同于具有N个任务的二元auprc,如果:

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

  2. 出于同样的原因,目标被转置

请参阅以下示例,了解更多关于多标签和二分类AUPRC之间联系的详细信息。

Parameters:
  • input (Tensor) – 标签预测的张量 它应该是形状为 (n_sample, n_label) 的概率或对数几率。

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

  • num_labels (int) – 标签数量。

  • average (str, optional) –

    • 'macro' [默认]:

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

    • None'none':

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

Examples::
>>> 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])