二分类指标计算

本文介绍了如何使用PyTorch加载预训练模型,并通过Python的torch和sklearn库计算测试数据集的LogLoss、AUC和EER。涉及到的关键步骤包括计算每个批次的loss、转换预测概率、绘制ROC曲线以及寻找等错误率点。
摘要由CSDN通过智能技术生成
加载预训练模型计算测试数据集的LogLoss、AUC和EER,需要根据具体场景选择相应的计算方法。以下是三种常见的方法:

1. 计算LogLoss:

```python
import torch
from torch.utils.data import DataLoader
import torch.nn.functional as F

# 加载模型和测试数据集
model = torch.load('pretrained_model.pth')
test_data = YourTestData(...)
test_loader = DataLoader(test_data, batch_size=64)

# 计算测试数据集的LogLoss
model.eval()
test_loss = 0
with torch.no_grad():
    for data, target in test_loader:
        output = model(data)
        test_loss += F.nll_loss(output, target).item()  # 累加每个批次的loss
        
test_loss /= len(test_loader)  # loss取平均值
print('Test set: Average Loss: {:.4f}'.format(test_loss))

上述代码中,使用PyTorch提供的F.nll_loss()函数来计算测试数据集的LogLoss。在计算时需要累加每个批次的loss,最后将总和除以测试集的样本数就可以得到平均Loss。

  1. 计算AUC:
import torch
from torch.utils.data import DataLoader
from sklearn.metrics import roc_auc_score

# 加载模型和测试数据集
model = torch.load('pretrained_model.pth')
test_data = YourTestData(...)
test_loader = DataLoader(test_data, batch_size=64)

# 计算测试数据集的预测概率和真实标签
model.eval()
y_true, y_score = [], []
with torch.no_grad():
    for data, target in test_loader:
        output = torch.sigmoid(model(data))  # 使用sigmoid转换到0~1之间的概率
        y_true.extend(target.tolist())  # 将真实标签添加到列表中
        y_score.extend(output.tolist())  # 将预测概率添加到列表中
        
# 计算AUC
auc = roc_auc_score(y_true, y_score)
print('Test set: AUC = {:.4f}'.format(auc))

上述代码中,使用sklearn.metrics提供的roc_auc_score()函数来计算测试数据集的AUC。在计算时需要获取每个样本的预测概率和真实标签,可以使用torch.sigmoid()将输出转换到0~1之间的概率,然后将它们添加到两个列表中。最后使用roc_auc_score()函数来计算AUC。

  1. 计算EER:
import torch
import numpy as np
from scipy.optimize import brentq
from sklearn.metrics import roc_curve


def calculate_eer(y_true, y_score):
    fpr, tpr, thresholds = roc_curve(y_true, y_score, pos_label=1)
    eer = brentq(lambda x: 1. - x - np.interp(x, fpr, tpr), 0., 1.)
    return eer * 100

# 加载模型和测试数据集
model = torch.load('pretrained_model.pth')
test_data = YourTestData(...)
test_loader = DataLoader(test_data, batch_size=64)

# 计算测试数据集的预测概率和真实标签
model.eval()
y_true, y_score = [], []
with torch.no_grad():
    for data, target in test_loader:
        output = torch.sigmoid(model(data))  # 使用sigmoid转换到0~1之间的概率
        y_true.extend(target.tolist())  # 将真实标签添加到列表中
        y_score.extend(output.tolist())  # 将预测概率添加到列表中
        
# 计算EER
eer = calculate_eer(y_true, y_score)
print('Test set: EER = {:.2f}%'.format(eer))

上述代码中,自定义了一个calculate_eer()函数来计算测试数据集的EER。首先使用sklearn.metrics提供的roc_curve()函数来计算FPR和TPR,并获得阈值。然后使用scipy.optimize提供的brentq()函数来求解ERR对应的阈值,最后将求解结果乘以100,即可得到EER的百分比形式。
``

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值