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,如果
输入被转置,在二元分类中,示例与列相关联,而在多类分类中,示例与行相关联。
target 从 [1,0,1] 形式转换为 [[0,1,0], [1,0,1]] 形式
请参阅下面的示例,详细了解多类和二元 AUPRC 之间的联系。
此指标的功能版本是
torcheval.metrics.functional.multiclass_auprc()
.- 参数:
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()
的最后一个输入设备。