python 多分类画auc曲线和macro-average ROC curve

网友投稿 1723 2022-10-01

python 多分类画auc曲线和macro-average ROC curve

python 多分类画auc曲线和macro-average ROC curve

最近帮一个人做了一个多分类画auc曲线的东西,不过最后那个人不要了,还被说了一顿,心里很是不爽,anyway,我写代码的还是要继续写代码的,所以我准备把我修改的代码分享开来,供大家研究学习。处理的数据大概是这种xlsx文件:

IMAGE y_real y_predict 0其他 1豹纹 2弥漫 3斑片 4黄斑/mnt/AI/HM/izy20200531c5/299/train/0其他/IM005111 (Copy).jpg 0 0 1 8.31E-19 7.59E-13 4.47E-15 2.46E-14/mnt/AI/HM/izy20200531c5/299/train/0其他/IM005201 (Copy).jpg 0 0 1 5.35E-17 4.38E-11 8.80E-13 3.85E-11/mnt/AI/HM/izy20200531c5/299/train/0其他/IM004938 (4) (Copy).jpg 0 0 1 1.20E-16 3.17E-11 6.26E-12 1.02E-11/mnt/AI/HM/izy20200531c5/299/train/0其他/IM004349 (3) (Copy).jpg 0 0 1 5.66E-14 1.87E-09 6.50E-09 3.29E-09/mnt/AI/HM/izy20200531c5/299/train/0其他/IM004673 (5) (Copy).jpg 0 0 1 5.51E-17 9.30E-12 1.33E-13 2.54E-12/mnt/AI/HM/izy20200531c5/299/train/0其他/IM004450 (5) (Copy).jpg 0 0 1 4.81E-17 3.75E-12 3.96E-13 6.17E-13

导入基础的pandas和keras处理函数

import pandas as pdfrom keras.utils import to_categorical

导入数据

data=pd.read_excel('5分类新.xlsx')data.head()

导入机器学习库

from sklearn.metrics import precision_recall_curveimport numpy as npfrom matplotlib import pyplotfrom sklearn.metrics import f1_scorefrom sklearn.metrics import roc_curve, auc

把ground truth提取出来

true_y=data[' y_real'].to_numpy()true_y=to_categorical(true_y)

把每个类别的数据提取出来

PM_y=data[[' 0其他',' 1豹纹',' 2弥漫',' 3斑片',' 4黄斑']].to_numpy()PM_y.shape

计算每个类别的fpr和tpr

n_classes=PM_y.shape[1]fpr = dict()tpr = dict()roc_auc = dict()for i in range(n_classes): fpr[i], tpr[i], _ = roc_curve(true_y[:, i], PM_y[:, i]) roc_auc[i] = auc(fpr[i], tpr[i])

计算macro auc

from scipy import interp# First aggregate all false positive ratesall_fpr = np.unique(np.concatenate([fpr[i] for i in range(n_classes)]))# Then interpolate all ROC curves at this pointsmean_tpr = np.zeros_like(all_fpr)for i in range(n_classes): mean_tpr += interp(all_fpr, fpr[i], tpr[i])# Finally average it and compute AUCmean_tpr /= n_classesfpr["macro"] = all_fprtpr["macro"] = mean_tprroc_auc["macro"] = auc(fpr["macro"], tpr["macro"])

画图

import matplotlib.pyplot as pltfrom itertools import cyclefrom matplotlib.ticker import FuncFormatterlw = 2# Plot all ROC curvesplt.figure()labels=['Category 0','Category 1','Category 2','Category 3','Category 4']plt.plot(fpr["macro"], tpr["macro"], label='macro-average ROC curve (area = {0:0.4f})' ''.format(roc_auc["macro"]), color='navy', linestyle=':', linewidth=4)colors = cycle(['aqua', 'darkorange', 'cornflowerblue','blue','yellow'])for i, color in zip(range(n_classes), colors): plt.plot(fpr[i], tpr[i], color=color, lw=lw, label=labels[i]+'(area = {0:0.4f})'.format(roc_auc[i]))plt.plot([0, 1], [0, 1], 'k--', lw=lw)plt.xlim([0.0, 1.0])plt.ylim([0.0, 1.05])plt.xlabel('1-Specificity (%)')plt.ylabel('Sensitivity (%)')plt.title('Some extension of Receiver operating characteristic to multi-class')def to_percent(temp, position): return '%1.0f'%(100*temp)plt.gca().yaxis.set_major_formatter(FuncFormatter(to_percent))plt.gca().xaxis.set_major_formatter(FuncFormatter(to_percent))plt.legend(loc="lower right")plt.show()

展示

上述的代码是在jupyter中运行的,所以是分开的

参考文献

[1].ROC原理介绍及利用python实现二分类和多分类的ROC曲线. ​​ROC原理介绍及利用python实现二分类和多分类的ROC曲线_山不过来,我就过去-_roc曲线python实现​​

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:could not open directory /lib/modules/4.13.0-43-generic: No such file or directory
下一篇:学习微信小程序如何使用echarts图表(echarts图表绘制的四大步骤)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~