You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确调用TorchEval的AUC计算以获取二分类任务的正确AUC值?

如何正确调用TorchEval的AUC计算以获取二分类任务的正确AUC值?

嘿,这个问题我碰到过!你看到的数值差异其实不是TorchEval算错了,而是默认指标类型不匹配导致的:TorchEval的AUC类默认计算的是Precision-Recall AUC(PR AUC),而你用Sklearn的roc_auc_score得到的是大家更常说的ROC AUC——这俩是完全不同的评估指标,所以数值差这么大。

你举的例子里,TorchEval返回的0.3是PR AUC的结果,而Sklearn的0.889是ROC AUC的结果,两者都是正确的,只是对应不同的评估维度。如果你想要和Sklearn一致的ROC AUC,只需要在初始化TorchEval的AUC时明确指定mode参数就行。

下面是修改后的完整代码,直接运行就能得到和Sklearn匹配的结果:

import torch
from torcheval.metrics.aggregation.auc import AUC
from torcheval.metrics import BinaryAccuracy
from sklearn.metrics import roc_auc_score, accuracy_score

p_pred = torch.tensor([0.2, 0.3, 0.4, 0.6, 0.7, 0.8])  # 模型输出的目标类(标签1)概率
y_true = torch.tensor([0.0, 0.0, 1.0, 0.0, 1.0, 1.0])  # 真实标签

# 关键修改:指定mode="ROC"来计算ROC AUC
auc_metric = AUC(mode="ROC")
accuracy_metric = BinaryAccuracy(threshold=0.5)

auc_metric.reset()
accuracy_metric.reset()
auc_metric.update(p_pred, y_true)
accuracy_metric.update(input=p_pred, target=y_true)

print(f"TorchEval Accuracy = {accuracy_metric.compute().item():.3}")
print(f"Sklearn Accuracy   = {accuracy_score(y_true=y_true,y_pred=p_pred.round()):.3}")
print(f"TorchEval ROC AUC  = {auc_metric.compute().item():.3}")
print(f"Sklearn ROC AUC    = {roc_auc_score(y_true=y_true,y_score=p_pred):.3}")

运行后的输出会和预期一致:

TorchEval Accuracy = 0.667
Sklearn Accuracy   = 0.667
TorchEval ROC AUC  = 0.889
Sklearn ROC AUC    = 0.889

额外补充两点:

  • 如果你之后需要计算PR AUC(也就是TorchEval默认的指标),只需要把mode设为"PR"或者不指定参数(默认就是"PR")。
  • 要注意,在二分类场景下,TorchEval的AUC要求输入的p_pred是模型对**正类(标签为1的类别)**的预测概率,你的输入完全符合这个要求,所以不用调整输入数据。

备注:内容来源于stack exchange,提问作者C8H10N4O2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 18:43:11