快捷方式

torcheval.metrics.MultilabelAUPRC

class torcheval.metrics.MultilabelAUPRC(*, num_labels: int, average: str | None = 'macro', device: device | None = None)

计算多标签分类的 AUPRC,也称为平均精度,它是精度-召回曲线下的面积。

精度定义为 \(\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 之间联系的更多详细信息,请参见下面的示例。

此指标的函数版本为 torcheval.metrics.functional.multilabel_auprc().

参数:
  • num_labels (int) – 标签数量。

  • average (str, optional) –

    • 'macro' [默认]

      分别计算每个标签的指标,然后返回它们的非加权平均值。

    • :

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

示例

>>> import torch
>>> from torcheval.metrics import MultilabelAUPRC
>>> metric = MultilabelAUPRC(num_labels=3, average=None)
>>> 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]])
>>> metric.update(input, target)
>>> metric.compute()
tensor([0.7500, 0.5833, 0.9167])

>>> metric = MultilabelAUPRC(num_labels=3, average='macro')
>>> input = torch.tensor([[0.75, 0.05, 0.35], [0.05, 0.55, 0.75]])
>>> target = torch.tensor([[1, 0, 1], [0, 1, 1]])
>>> metric.update(input, target)
>>> metric.compute()
tensor(1.)
>>> input = torch.tensor([[0.45, 0.75, 0.05], [0.05, 0.65, 0.05]])
>>> target = torch.tensor([[0, 0, 0], [1, 1, 1]])
>>> metric.update(input, target)
>>> metric.compute()
tensor(0.7500)

Connection to BinaryAUPRC
>>> metric = MultilabelAUPRC(num_labels=3, average=None)
>>> 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]])
>>> metric.update(input, target)
>>> metric.compute()
tensor([0.5000, 1.0000, 1.0000])

the above is equivalent to
>>> from torcheval.metrics import BinaryAUPRC
>>> metric = BinaryAUPRC(num_tasks=3)
>>> 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]])
>>> metric.update(input, target)
>>> metric.compute()
tensor([0.5000, 1.0000, 1.0000])
__init__(*, num_labels: int, average: str | None = 'macro', device: device | None = None) None

初始化指标对象及其内部状态。

使用 self._add_state() 初始化指标类状态变量。状态变量应为 torch.Tensortorch.Tensor 列表、以 torch.Tensor 作为值的字典或 torch.Tensor 的双端队列。

方法

__init__(*, num_labels[, average, device])

初始化指标对象及其内部状态。

compute()

实现此方法以计算和返回从状态变量计算的最终指标值。

load_state_dict(state_dict[, strict])

从 state_dict 加载指标状态变量。

merge_state(metrics)

实现此方法以更新当前指标的状态变量,使其成为当前指标和输入指标的合并状态。

reset()

将指标状态变量重置为默认值。

state_dict()

将指标状态变量保存在 state_dict 中。

to(device, *args, **kwargs)

将指标状态变量中的张量移动到设备。

update(input, target)

使用基本事实标签和预测更新状态。

属性

device

Metric.to() 的最后一个输入设备。

文档

访问 PyTorch 的全面开发者文档

查看文档

教程

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

查看教程

资源

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

查看资源