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 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相关推荐
- python多分类画roc曲线_利用python制作ROC曲线进行多分类
使用label_binarize:import matplotlib.pyplot as plt from sklearn import svm, datasets from sklearn.mode ...
- Python多分类问题pr曲线绘制(含代码)
研究了三天的多分类pr曲线问题终于在昨天晚上凌晨一点绘制成功了!! 现将所学所感记录一下,一来怕自己会忘可以温故一下,二来希望能给同样有疑惑的铁子们一些启迪! 下图为我画的pr曲线,因为准确度超过了9 ...
- python多分类画混淆矩阵_【AI基础】分类器评估一:混淆矩阵、准确率、精确率、召回率、灵敏度、特异度、误诊率、漏诊率...
混淆矩阵 在机器学习中尤其是统计分类中,混淆矩阵(confusion matrix),也被称为错误矩阵(error matrix).之所以叫做混淆矩阵,是因为能够很容易的看到机器学习有没有将样本的类别 ...
- python读取excel画数据曲线
部分数据 test.xlsx 两列,第一列为x, 第二列为y 代码: # coding=utf-8import matplotlib matplotlib.use('TkAgg') import nu ...
- roc曲线和auc_roc和auc曲线的初学者指南
roc曲线和auc 博客结构(Blog Structure) As can be seen in the title above, the purpose of this blog is to gai ...
- python画曲线-利用python画出AUC曲线的实例
以load_breast_cancer数据集为例,模型细节不重要,重点是画AUC的代码. 直接上代码: from sklearn.datasets import load_breast_cancer ...
- python怎么画出圆润的曲线_利用python画出AUC曲线的实例
以load_breast_cancer数据集为例,模型细节不重要,重点是画AUC的代码. 直接上代码: from sklearn.datasets import load_breast_cancer ...
- 利用python画曲线_利用python画出AUC曲线的实例
以load_breast_cancer数据集为例,模型细节不重要,重点是画AUC的代码.1XS免费资源网 直接上代码:1XS免费资源网 from sklearn.datasets import loa ...
- python画auc_利用python画出AUC曲线的实例
以load_breast_cancer数据集为例,模型细节不重要,重点是画AUC的代码. 直接上代码: from sklearn.datasets import load_breast_cancer ...
最新文章
- 好书 《古代的中医》 《麦肯锡卓越工作方法》
- php104.tmp,ThinkPHP5.0多个文件上传后找不到临时文件的修改方法
- OpenStack 通用设计思路
- 硬核创客DIY遥控氦气球飞行器——会飞的鲨鱼的诞生的全过程
- C语言文件读写(5)-文件位置相关
- Tomcat9URL不支持特殊字符解决方案
- netpref 使用_使用PerfView监测.NET程序性能(转发)
- leetcode 142 --- linked-list-cycle-ii
- ruby 集合 分组_在Ruby中打印集合的元素
- django模型查询
- 【论文】Awesome Relation Extraction Paper(关系抽取)(PART V)
- Sessions and Processes
- 中控考勤机无线连接不上服务器,中控考勤机连接不上电脑的解决方法
- 超级强大灵活的文件批量修改文件名工具,彻底告别手工改名的烦恼
- react学习笔记(二)
- 【json】json文件中文乱码
- python之禅中文原文_Python之禅翻译
- 【JAVA】TCP通信——发弹幕案例
- 全面演示springboot发送QQ邮件过程(复杂邮件+简单邮件)图片、附件
- 内网网站发布到外网-五种方法
热门文章
- mysql (errcode 13)_MySQL 启动报错:File ./mysql-bin.index not found (Errcode: 13)
- 一个无敌删除的命令,所有的流氓软件及顽固程序等都可以轻松的删除
- 快速给照片添加签名或水印
- Redis 主从安装-Centos
- InfiniBand主流厂商和产品分析
- LeetCode 942. 增减字符串匹配(DI String Match) 49
- 线上VR展会虚拟展厅,是展览业发展的必然趋势
- 用Python画Logistic函数图像
- excel公式编辑器_6小时,写了一篇适合Excel小白学的VBA入门教程
- 开启1521端口监听_修改Oracle监听默认端口号1521的方法