Shortcuts

torcheval.metrics.MulticlassAUPRC

class torcheval.metrics.MulticlassAUPRC(*, num_classes: 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中,目标张量是一维的,并且包含一个整数条目,表示输入张量中每个示例的类别。每个类别都以一对多的方式独立考虑,该类别的示例被标记为条件真,所有其他类别被视为条件假。

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

  1. 输入被转置,在二分类中样本与列相关联,而在多分类中样本与行相关联。

  2. 目标 target 从形式 [1,0,1] 转换为形式 [[0,1,0], [1,0,1]]

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

此指标的功能版本是 torcheval.metrics.functional.multiclass_auprc()

Parameters:
  • num_classes (int) – 类别数量。

  • average (str, optional) –

    • 'macro' [默认]:

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

    • None:

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

示例:

>>> import torch
>>> from torcheval.metrics import MulticlassAUPRC
>>> metric = MulticlassAUPRC(num_classes=3)
>>> input = torch.tensor([[0.1, 0.1, 0.1], [0.5, 0.5, 0.5], [0.7, 0.7, 0.7], [0.8, 0.8, 0.8]])
>>> target = torch.tensor([0, 2, 1, 1])
>>> metric.update(input, target)
>>> metric.compute()
tensor(0.5278)

>>> metric = MulticlassAUPRC(num_classes=3)
>>> input = torch.tensor([[0.5, .2, 3], [2, 1, 6]])
>>> target = torch.tensor([0, 2])
>>> metric.update(input, target)
>>> metric.compute()
tensor(0.5000)
>>> input = torch.tensor([[5, 3, 2], [.2, 2, 3], [3, 3, 3]])
>>> target = torch.tensor([2, 2, 1])
>>> metric.update(input, target)
>>> metric.compute()
tensor(0.4833)

Connection to BinaryAUPRC
>>> metric = MulticlassAUPRC(num_classes=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([0, 1, 2, 2])
>>> 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_classes: int, average: str | None = 'macro', device: device | None = None) None

初始化一个度量对象及其内部状态。

使用 self._add_state() 来初始化你的度量类的状态变量。 状态变量应该是 torch.Tensor,一个 torch.Tensor 的列表,一个以 torch.Tensor 为值的字典, 或者一个 torch.Tensor 的双端队列。

方法

__init__(*, num_classes[, 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()的最后一个输入设备。