我需要使用二进制分类对用户进行分类(每种情况下为用户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()
此外,如何获得平均AUC?
我不确定我是否了解您的设置,但总的来说,您可以使用sklearn
s roc_auc_score
计算多分类器的平均AUC。如果按average来表示将每个类别与每个其他类别进行比较,请使用ovo
(一个对一个)。否则,如果您希望将每个类别与所有其他类别进行比较,请使用ovr
(一个与其他)。这是multi_class
参数的文档:
multi_class {'raise','ovr','ovo'},default ='raise'] >>
仅适用于多类。确定要使用的配置类型。默认值提高错误,因此必须显式传递
ovr
或ovo
。
'ovr'
:针对其余[3] [4]计算每个类别的AUC。这个以与多标签大小写相同的方式处理多类大小写。即使在average == 'macro'
时,也敏感于班级失衡,因为班级失衡会影响每个“休息”的构成分组。
'ovo'
:计算所有可能的成对组合的平均AUC类[5]。当average == 'macro'
时,对类别不平衡不敏感。https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.htm