最近帮一个人做了一个多分类画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 pd
from keras.utils import to_categorical
  • 导入数据
data=pd.read_excel('5分类新.xlsx')
data.head()
  • 导入机器学习库
from sklearn.metrics import precision_recall_curve
import numpy as np
from matplotlib import pyplot
from sklearn.metrics import f1_score
from 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 rates
all_fpr = np.unique(np.concatenate([fpr[i] for i in range(n_classes)]))# 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[i], tpr[i])# Finally average it and compute AUC
mean_tpr /= n_classesfpr["macro"] = all_fpr
tpr["macro"] = mean_tpr
roc_auc["macro"] = auc(fpr["macro"], tpr["macro"])
  • 画图
import matplotlib.pyplot as plt
from itertools import cycle
from matplotlib.ticker import FuncFormatter
lw = 2
# Plot all ROC curves
plt.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曲线_山不过来,我就过去-CSDN博客_roc曲线python实现

python 多分类画auc曲线和macro-average ROC curve相关推荐

  1. python多分类画roc曲线_利用python制作ROC曲线进行多分类

    使用label_binarize:import matplotlib.pyplot as plt from sklearn import svm, datasets from sklearn.mode ...

  2. Python多分类问题pr曲线绘制(含代码)

    研究了三天的多分类pr曲线问题终于在昨天晚上凌晨一点绘制成功了!! 现将所学所感记录一下,一来怕自己会忘可以温故一下,二来希望能给同样有疑惑的铁子们一些启迪! 下图为我画的pr曲线,因为准确度超过了9 ...

  3. python多分类画混淆矩阵_【AI基础】分类器评估一:混淆矩阵、准确率、精确率、召回率、灵敏度、特异度、误诊率、漏诊率...

    混淆矩阵 在机器学习中尤其是统计分类中,混淆矩阵(confusion matrix),也被称为错误矩阵(error matrix).之所以叫做混淆矩阵,是因为能够很容易的看到机器学习有没有将样本的类别 ...

  4. python读取excel画数据曲线

    部分数据 test.xlsx 两列,第一列为x, 第二列为y 代码: # coding=utf-8import matplotlib matplotlib.use('TkAgg') import nu ...

  5. roc曲线和auc_roc和auc曲线的初学者指南

    roc曲线和auc 博客结构(Blog Structure) As can be seen in the title above, the purpose of this blog is to gai ...

  6. python画曲线-利用python画出AUC曲线的实例

    以load_breast_cancer数据集为例,模型细节不重要,重点是画AUC的代码. 直接上代码: from sklearn.datasets import load_breast_cancer ...

  7. python怎么画出圆润的曲线_利用python画出AUC曲线的实例

    以load_breast_cancer数据集为例,模型细节不重要,重点是画AUC的代码. 直接上代码: from sklearn.datasets import load_breast_cancer ...

  8. 利用python画曲线_利用python画出AUC曲线的实例

    以load_breast_cancer数据集为例,模型细节不重要,重点是画AUC的代码.1XS免费资源网 直接上代码:1XS免费资源网 from sklearn.datasets import loa ...

  9. python画auc_利用python画出AUC曲线的实例

    以load_breast_cancer数据集为例,模型细节不重要,重点是画AUC的代码. 直接上代码: from sklearn.datasets import load_breast_cancer ...

最新文章

  1. 好书 《古代的中医》 《麦肯锡卓越工作方法》
  2. php104.tmp,ThinkPHP5.0多个文件上传后找不到临时文件的修改方法
  3. OpenStack 通用设计思路
  4. 硬核创客DIY遥控氦气球飞行器——会飞的鲨鱼的诞生的全过程
  5. C语言文件读写(5)-文件位置相关
  6. Tomcat9URL不支持特殊字符解决方案
  7. netpref 使用_使用PerfView监测.NET程序性能(转发)
  8. leetcode 142 --- linked-list-cycle-ii
  9. ruby 集合 分组_在Ruby中打印集合的元素
  10. django模型查询
  11. 【论文】Awesome Relation Extraction Paper(关系抽取)(PART V)
  12. Sessions and Processes
  13. 中控考勤机无线连接不上服务器,中控考勤机连接不上电脑的解决方法
  14. 超级强大灵活的文件批量修改文件名工具,彻底告别手工改名的烦恼
  15. react学习笔记(二)
  16. 【json】json文件中文乱码
  17. python之禅中文原文_Python之禅翻译
  18. 【JAVA】TCP通信——发弹幕案例
  19. 全面演示springboot发送QQ邮件过程(复杂邮件+简单邮件)图片、附件
  20. 内网网站发布到外网-五种方法

热门文章

  1. mysql (errcode 13)_MySQL 启动报错:File ./mysql-bin.index not found (Errcode: 13)
  2. 一个无敌删除的命令,所有的流氓软件及顽固程序等都可以轻松的删除
  3. 快速给照片添加签名或水印
  4. Redis 主从安装-Centos
  5. InfiniBand主流厂商和产品分析
  6. LeetCode 942. 增减字符串匹配(DI String Match) 49
  7. 线上VR展会虚拟展厅,是展览业发展的必然趋势
  8. 用Python画Logistic函数图像
  9. excel公式编辑器_6小时,写了一篇适合Excel小白学的VBA入门教程
  10. 开启1521端口监听_修改Oracle监听默认端口号1521的方法