如何在Python中绘制平均ROC和AUC?

问题描述 投票:2回答:1

我需要使用二进制分类对用户进行分类(每种情况下为用户1或0)。

我有30个用户,并且有30套FPR和TPR。

我没有使用roc_curve(y_test.ravel(), y_score.ravel())来获取FPR和TPF(出于这个原因,我不得不使用二进制分类对它们中的每一个进行分类,并使用自己的代码生成FPR A和TPF)。

实际上,我的设置是我没有将类别标签存储为多类别。我所做的是,我将一个用户评为正面,其余的则作为负面。我为所有其他用户重复了一次。然后,我使用自己的代码而不使用roc_auc_score来计算FPR和TPF。

假设我已经在列表中拥有FPR和TPF的值。

我有这些代码:

from sklearn.metrics import roc_curve, auc
import matplotlib.pyplot as plt
from scipy import interp

n_classes=30

# First aggregate all false positive rates
all_fpr = np.unique(np.concatenate([fpr_svc[i] for i in range(n_classes)])) # Classified using SVC

# Then interpolate all ROC curves at this points
mean_tpr = np.zeros_like(all_fpr)
for i in range(n_classes):
    mean_tpr += interp(all_fpr, fpr_svc[i], tpr_svc[i])

# Finally average it and compute AUC
mean_tpr /= n_classes

fpr = all_fpr[:]
tpr = mean_tpr[:]

plt.figure()
lw = 2
plt.plot(fpr, tpr, color='darkorange',
         lw=lw)
plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Acceptance Rate')
plt.ylabel('True Acceptance Rate')
plt.title('Receiver operating characteristic example')
plt.legend(loc="lower right")
plt.show()

但是,它产生了这个看起来很奇怪的数字。enter image description here

此外,如何获得平均AUC?

python roc auc
1个回答
0
投票

我不确定我是否了解您的设置,但总的来说,您可以使用sklearn s roc_auc_score计算多分类器的平均AUC。如果按average来表示将每个类别与每个其他类别进行比较,请使用ovo(一个对一个)。否则,如果您希望将每个类别与所有其他类别进行比较,请使用ovr(一个与其他)。这是multi_class参数的文档:

multi_class {'raise','ovr','ovo'},default ='raise'] >>

仅适用于多类。确定要使用的配置类型。默认值提高错误,因此必须显式传递ovrovo

'ovr':针对其余[3] [4]计算每个类别的AUC。这个以与多标签大小写相同的方式处理多类大小写。即使在average == 'macro'时,也敏感于班级失衡,因为班级失衡会影响每个“休息”的构成分组。

'ovo':计算所有可能的成对组合的平均AUC类[5]。当average == 'macro'时,对类别不平衡不敏感。

https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.htm

© www.soinside.com 2019 - 2024. All rights reserved.