python正确的的画出ROC曲线

ROC曲线简介

受试者工作特征曲线 (receiver operating characteristic curve,简称ROC曲线),又称为感受性曲线(sensitivity curve)。得此名的原因在于曲线上各点反映着相同的感受性,它们都是对同一信号刺激的反应,只不过是在几种不同的判定标准下所得的结果而已。为了了解ROC曲线的意义,我们首先得了解一些变量。以下定义引自维基百科
最近在做一些分类的任务,评价中的ROC曲线在很多地方都会用得到,特别在论文中。在此记录一下在做ROC曲线的过程中遇到的一些坑。

1.画出来的ROC曲线是只有一个拐点的曲线

python正确的的画出ROC曲线_第1张图片

python正确的的画出ROC曲线_第2张图片
更极端的像上图这种直接是一条曲线,这是因为在计算fpr与tpr过程中,会使用到数据的真实标注以及模型的预测结果,在计算fpr与tpr以及阈值时,preds的值应该使用分类器输出的概率值,而不是准确的分类结果0/1

输出的图像不过原点

就像上图一样,输出的图像看起来不经过远点,将坐标轴的刻度设置的大一些,为[-0.05,1.05]即可。

分类器如何输出概率

SVM分类器中,将参数probability=True设置即可,神经网络中,在最后的全连接层输出结果上加上Softmax操作即可输出概率。

代码

'''
Author: weifeng liu
Date: 2022-02-12 20:53:17
LastEditTime: 2022-02-12 21:07:02
LastEditors: Please set LastEditors
Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
FilePath: lirui
ew_Data
oc.py
'''
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import sklearn.metrics as metrics

def plot_ROC(labels,preds,savepath):
    """
    Args:
        labels : ground truth
        preds : model prediction
        savepath : save path 
    """
    fpr1, tpr1, threshold1 = metrics.roc_curve(labels, preds)  ###计算真正率和假正率
    
    roc_auc1 = metrics.auc(fpr1, tpr1)  ###计算auc的值,auc就是曲线包围的面积,越大越好
    plt.figure()
    lw = 2
    plt.figure(figsize=(10, 10))
    plt.plot(fpr1, tpr1, color='darkorange',
            lw=lw, label='AUC = %0.2f' % roc_auc1)  ###假正率为横坐标,真正率为纵坐标做曲线
    plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')
    plt.xlim([-0.05, 1.05])
    plt.ylim([-0.05, 1.05])
    plt.xlabel('1 - Specificity')
    plt.ylabel('Sensitivity')
    # plt.title('ROCs for Densenet')
    plt.legend(loc="lower right")
    # plt.show()
    plt.savefig(savepath) #保存文件

python正确的的画出ROC曲线_第3张图片

你可能感兴趣的:(面试,学习路线,阿里巴巴,python,深度学习,机器学习,人工智能,开发语言)