我有一个包含3个类别标签(0,1,2)的数据。我试图制作ROC曲线。并使用pos_label参数做到了。
fpr, tpr, thresholds = metrics.roc_curve(Ytest, y_pred_prob, pos_label = 0)
通过将pos_label更改为0,1,2-,我得到3张图,现在在计算AUC分数时遇到问题。 如何计算3个图的平均值并从中绘制1个图,然后计算Roc_AUC分数。 我有这个错误 metrics.roc_auc_score(Ytest,y_pred_prob)
ValueError:不支持多类格式
请帮助我。
# store the predicted probabilities for class 0
y_pred_prob = cls.predict_proba(Xtest)[:, 0]
#first argument is true values, second argument is predicted probabilities
fpr, tpr, thresholds = metrics.roc_curve(Ytest, y_pred_prob, pos_label = 0)
plt.plot(fpr, tpr)
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.0])
plt.title('ROC curve classifier')
plt.xlabel('False Positive Rate (1 - Specificity)')
plt.ylabel('True Positive Rate (Sensitivity)')
plt.grid(True)
# store the predicted probabilities for class 1
y_pred_prob = cls.predict_proba(Xtest)[:, 1]
#first argument is true values, second argument is predicted probabilities
fpr, tpr, thresholds = metrics.roc_curve(Ytest, y_pred_prob, pos_label = 0)
plt.plot(fpr, tpr)
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.0])
plt.title('ROC curve classifier')
plt.xlabel('False Positive Rate (1 - Specificity)')
plt.ylabel('True Positive Rate (Sensitivity)')
# store the predicted probabilities for class 2
y_pred_prob = cls.predict_proba(Xtest)[:, 2]
#first argument is true values, second argument is predicted probabilities
fpr, tpr, thresholds = metrics.roc_curve(Ytest, y_pred_prob, pos_label = 0)
plt.plot(fpr, tpr)
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.0])
plt.title('ROC curve classifier')
plt.xlabel('False Positive Rate (1 - Specificity)')
plt.ylabel('True Positive Rate (Sensitivity)')
。生成3 roc曲线。由于有多个类别。
我希望通过取平均值或均值从3以上得到一条roc曲线。然后,从中获得一个roc_auc得分。
答案 0 :(得分:0)
对于多类,计算每个类的AUROC通常很有用。例如,这是我用来分别为每个类计算AUROC的一些代码的摘录,其中label_含义是描述每个标签是什么的字符串列表,并且格式化各个数组,使得每一行都是不同的示例,每一列对应到另一个标签:
project.table INNER JOIN rank1 ON table.id=rank1.id
如果要在三个类别上绘制平均AUC曲线:此代码https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html包括计算平均AUC的部分,以便您可以绘制图表(如果有三个类别,它将绘制平均值这三个类别的AUC。)
如果您只想在三个类别中获得平均AUC:一旦分别计算了每个类别的AUC,就可以对三个数字求平均值,以获得总体AUC。
如果您想了解AUROC的更多背景知识,以及如何针对单班还是多班计算AUROC,请参阅本文Measuring Performance: AUC (AUROC)。
答案 1 :(得分:0)
在多类AUC中的亮点:
您不能为所有类别计算一个通用AUC。您必须分别计算每个类别的AUC。正如您必须计算召回率一样,在进行多类别分类时,每个类别的精度是不同的。
计算单个类的AUC的SIMPLEST方法:
from sklearn.linear_model import LogisticRegression
LRE = LogisticRegression(solver='lbfgs')
LRE.fit(X_train, y_train)
我正在列出多类课程
d = y_test.unique()
class_name = list(d.flatten())
class_name
现在分别计算每个班级的AUC
for p in class_name:
`fpr, tpr, thresholds = metrics.roc_curve(y_test,
LRE.predict_proba(X_test)[:,1], pos_label = p)
auroc = round(metrics.auc(fpr, tpr),2)
print('LRE',p,'--AUC--->',auroc)`