多模型的ROC曲线绘制

ROC曲线是一种用于评估分类器性能的图形方法,通过比较真阳性率和假阳性率。文章展示了如何使用Python的sklearn库绘制ROC曲线,包括随机数据和真实数据的例子,并强调了AUC作为衡量整体性能的指标。此外,还讨论了ROC曲线在比较不同模型和阈值设置中的作用。
摘要由CSDN通过智能技术生成

ROC曲线

ROC曲线是一种评估分类器性能的图形工具,它以真阳性率(灵敏度)为纵坐标,假阳性率(1-特异度)为横坐标绘制。ROC曲线特别需要注意以下几点:

  • ROC曲线要与45度对角线比较,对角线表示随机猜测的结果,ROC曲线越靠近左上角,表示分类器越好。
  • ROC曲线下面积(AUC)可以反映分类器的整体性能,AUC越大,表示分类器越好。
  • ROC曲线可以用来比较不同的分类器或者不同的阈值设置,选择最佳的模型或者阈值。
  • 绘制ROC曲线时,需要传入真实标签和预测为正类的概率值,而不是预测的0-1标签。

在这里插入图片描述


一、使用随机生成的数据进行绘制

安装对应库,代码可以直接用

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve, auc
import numpy as np
import time

def Draw_Roc():
    # 生成随机数据
    np.random.seed(0)
    n_samples = 1000
    n_classes = 2

    # 真实标签
    y_true = np.random.randint(n_classes, size=n_samples)


    # 模拟三个模型的预测概率
    y_score1 = np.random.rand(n_samples).reshape(-1,1)
    y_score2 = np.random.rand(n_samples).reshape(-1,1)
    y_score3 = np.random.rand(n_samples).reshape(-1,1)

    # 定义颜色和线条样式
    colors = ['blue', 'red', 'green','c']
    linestyles = ['-', '--', '--', '--']


    # 绘制ROC曲线并计算AUC值
    plt.figure(figsize=(7, 5))
    for i, y_score in enumerate([y_score1,y_score2,y_score3,y_score4]):
        # 计算每个类别的TPR和FPR
        fpr = dict()
        tpr = dict()
        roc_auc = dict()

        for j in range(n_classes-1):
            fpr[j], tpr[j], _ = roc_curve(y_true == j, y_score[:, j])
            roc_auc[j] = auc(fpr[j], tpr[j])

        # 计算微平均TPR和FPR
        fpr["micro"], tpr["micro"], _ = roc_curve(y_true.ravel(), y_score.ravel())
        roc_auc["micro"] = auc(fpr["micro"], tpr["micro"])

        # 绘制微平均ROC曲线并添加图例
        plt.plot(fpr["micro"], tpr["micro"],
                 color=colors[i], linestyle=linestyles[i],
                 label='Model {0} (AUC = {1:0.2f})'
                       ''.format(i, roc_auc["micro"]))

    plt.plot([0, 1], [0, 1], 'k--')  # 绘制对角线作为参考线
    plt.xlim([0.0, 1.0])  # 设置x轴范围
    plt.ylim([0.0, 1.05])  # 设置y轴范围
    plt.xlabel('False Positive Rate')  # 设置x轴标签
    plt.ylabel('True Positive Rate')  # 设置y轴标签
    plt.title('ROC curve of mutiple-class models')  # 设置标题
    plt.legend(loc="lower right")  # 设置图例位置
    plt.savefig('rand_data_show')
    plt.show()  # 显示图像
	
if __name__ == '__main__':
    Draw_Roc()

在这里插入图片描述

二、使用真实数据绘制

代码如下:

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve, auc
import numpy as np
import time

def Draw_Roc():
    # 读取训练好的模型中的真实标签和预测为正类的概率值
    data1 = pd.read_csv('result_textcnn_Fast')
    y_true = np.array(data1['true_label_0']).reshape(-1,1)
    y_score1 = np.array(data1['0']).reshape(-1,1)

    data2 = pd.read_csv('result_bilstm_Fast')
    y_score2 = np.array(data2['0']).reshape(-1,1)

    data3 = pd.read_csv('result_cnnbilstm_Fast')
    y_score3 = np.array(data3['0']).reshape(-1, 1)

    data4 = pd.read_csv('result_bilstmAtt_Fast')
    y_score4 = np.array(data4['0']).reshape(-1, 1)

    n_classes = 2

    # 定义颜色和线条样式
    colors = ['blue', 'red', 'green','c']
    linestyles = ['-', '--', '--', '--']

    model_name = ['TextCNN','TextRNN','TextRCNN','Att-BiLSTM']


    # 绘制ROC曲线并计算AUC值
    plt.figure(figsize=(7, 5))
    for i, y_score in enumerate([y_score1,y_score2,y_score3,y_score4]):
        # 计算每个类别的TPR和FPR
        fpr = dict()
        tpr = dict()
        roc_auc = dict()

        for j in range(n_classes-1):
            fpr[j], tpr[j], _ = roc_curve(y_true == j, y_score[:, j])
            roc_auc[j] = auc(fpr[j], tpr[j])

        # 计算微平均TPR和FPR
        fpr["micro"], tpr["micro"], _ = roc_curve(y_true.ravel(), y_score.ravel())
        roc_auc["micro"] = auc(fpr["micro"], tpr["micro"])

        # 绘制微平均ROC曲线并添加图例
        plt.plot(fpr["micro"], tpr["micro"],
                 color=colors[i], linestyle=linestyles[i],
                 label='Model {0} (AUC = {1:0.2f})'
                       ''.format(model_name[i], roc_auc["micro"]))

    plt.plot([0, 1], [0, 1], 'k--')  # 绘制对角线作为参考线
    plt.xlim([0.0, 1.0])  # 设置x轴范围
    plt.ylim([0.0, 1.05])  # 设置y轴范围
    plt.xlabel('False Positive Rate')  # 设置x轴标签
    plt.ylabel('True Positive Rate')  # 设置y轴标签
    plt.title('ROC curve of different models')  # 设置标题
    plt.legend(loc="lower right")  # 设置图例位置
    plt.savefig('real_data_show')
    plt.show()  # 显示图像

if __name__ == '__main__':
    Draw_Roc()


在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值