多分类AUC/ROC曲线绘制

凯哥英语视频

前言

基础好的就别看了 , 我用的死方法 ,
数据转化都不会… 基础差的来看 .

数据文件下载

数据文件在百度网盘
数据文件下载
https://pan.baidu.com/s/1_wtmL8Ve1dCAg77TEumA4g
提取码:520y

效果图

在这里插入图片描述

代码解释
一共5个分类 , [0,1,2,3,4] , 对应的准确率为0 , 1 , 2, 3 , 4 的列

在这里插入图片描述
其实红色的real_label,转换数据之后就是右边蓝色的部分, 你是真的,就取1,其他类就取0.

代码部分

代码我自己跑过的, 绝对ok

import pandas as pd
from sklearn import metrics
from sklearn.metrics import auc
import matplotlib.pyplot as plt

CSV_file = 'F:\\rizhifuzhu\\2021\\202105\\roc0518\\f.csv'

p_csv = pd.read_csv(CSV_file,usecols=['r0','0','r1','1','r2','2','r3','3','r4','4'])

fpr = dict()
tpr = dict()
roc_auc = dict()

y_label0= p_csv['r0'].to_numpy()
y_pre0 = p_csv['0'].to_numpy()
fpr['0'], tpr['0'], thersholds = metrics.roc_curve(y_label0, y_pre0)
roc_auc['0'] = auc(fpr['0'], tpr['0'])
print(roc_auc['0'])

y_label1 = p_csv['r1'].to_numpy()
y_pre1 = p_csv['1'].to_numpy()
# print(y_label1)
# print(y_pre1)
fpr['1'], tpr['1'], thersholds = metrics.roc_curve(y_label1, y_pre1)
roc_auc['1'] = auc(fpr['1'], tpr['1'])
print(roc_auc['1'])

y_label2 = p_csv['r2'].to_numpy()
y_pre2 = p_csv['2'].to_numpy()
fpr['2'], tpr['2'], thersholds = metrics.roc_curve(y_label2, y_pre2)
roc_auc['2'] = auc(fpr['2'], tpr['2'])
print(roc_auc['2'])

y_label3 = p_csv['r3'].to_numpy()
y_pre3 = p_csv['3'].to_numpy()
fpr['3'], tpr['3'], thersholds = metrics.roc_curve(y_label3, y_pre3)
roc_auc['3'] = auc(fpr['3'], tpr['3'])
print(roc_auc['3'])

y_label4 = p_csv['r4'].to_numpy()
y_pre4 = p_csv['4'].to_numpy()
fpr['4'], tpr['4'], thersholds = metrics.roc_curve(y_label4, y_pre4)
roc_auc['4'] = auc(fpr['4'], tpr['4'])
print(roc_auc['4'])

colors = ['aqua', 'darkorange', 'deeppink', 'navy', 'cornflowerblue']
lw=2
plt.figure()


n_classes = ['0', '1', '2', '3', '4']

# plt.plot(fpr['1'], tpr['1'], color=colors[int('1')], lw=lw,
#             label='ROC curve of class {0} (area = {1:0.2f})'
#             ''.format('1', roc_auc['1']))
for i in n_classes:
    roc_auc[i] = auc(fpr[i], tpr[i])
    plt.plot(fpr[i], tpr[i], color=colors[int(i)], lw=lw,
             label='ROC curve of class {0} (AUC = {1:0.2f})'
             ''.format(i, roc_auc[i]))
# plt.plot(fpr, tpr, 'k--', label='ROC (area = {0:.2f})'.format(roc_auc), lw=2)


plt.plot([0, 1], [0, 1], 'k--', lw=lw)
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Some extension of Receiver operating characteristic to multi-class')
plt.legend(loc="lower right")
plt.show()

别的也没啥说的, 如果觉得 ok 就给我一键三连吧!

欢迎各位大佬留言吐槽,也可以深入交流~

  • 12
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
首先,AUC和PR曲线是用于评估二元分类模型的性能指标,需要有真实标签和预测概率(或logits)作为输入。 对于AUC曲线,可以按照以下步骤进行绘制: 1. 从模型输出的logits中计算出预测概率(或使用sigmoid函数进行转换)。 2. 将真实标签和预测概率按照预测概率从大到小排序。 3. 遍历每个预测概率作为阈值,计算出对应的真正率(TPR)和假正率(FPR)。 4. 将每个TPR和FPR值作为坐标绘制ROC曲线,计算出曲线下面积即为AUC值。 对于PR曲线,可以按照以下步骤进行绘制: 1. 从模型输出的logits中计算出预测概率(或使用sigmoid函数进行转换)。 2. 将真实标签和预测概率按照预测概率从大到小排序。 3. 遍历每个预测概率作为阈值,计算出对应的精确率(precision)和召回率(recall)。 4. 将每个精确率和召回率值作为坐标绘制PR曲线,计算出曲线下面积即为PR值。 在Python中,可以使用scikit-learn库中的roc_curve和precision_recall_curve函数计算ROC曲线和PR曲线,并使用matplotlib库进行绘制。具体代码可以参考以下示例: ```python from sklearn.metrics import roc_curve, precision_recall_curve, auc import matplotlib.pyplot as plt # 计算ROC曲线AUC值 fpr, tpr, thresholds = roc_curve(y_true, y_pred) roc_auc = auc(fpr, tpr) # 绘制ROC曲线 plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (area = %0.2f)' % roc_auc) plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--') plt.xlim([0.0, 1.0]) plt.ylim([0.0, 1.05]) plt.xlabel('False Positive Rate') plt.ylabel('True Positive Rate') plt.title('Receiver operating characteristic') plt.legend(loc="lower right") plt.show() # 计算PR曲线和PR值 precision, recall, thresholds = precision_recall_curve(y_true, y_pred) pr_auc = auc(recall, precision) # 绘制PR曲线 plt.plot(recall, precision, color='darkorange', lw=2, label='PR curve (area = %0.2f)' % pr_auc) plt.xlim([0.0, 1.0]) plt.ylim([0.0, 1.05]) plt.xlabel('Recall') plt.ylabel('Precision') plt.title('Precision-Recall curve') plt.legend(loc="lower right") plt.show() ```
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

justwaityou1314

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值