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:
input 进行转置,在二元标签化中,示例与列相关联,而在多标签分类中,示例与行相关联。
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])