ROC曲线

作者: whisper0710 | 来源:发表于2020-07-25 21:05 被阅读0次

    在正负样本不均匀的情况下,ROC曲线是一个能更加稳定反应模型好坏的指标。

    1.理论

    1.1 用途

    反应分类模型在选取不同阈值时候的敏感性(sensitivity,FPR)和精确性(specificity, TPR)。

    1.2 定义

    ROC: Receiver Operating Characteristic Curve(受试者工作曲线)

    image

    其中横坐标是FPR(False Positive Rate) = FP/N = FP/(FP+TN)

    纵坐标是TPR(True Positive Rate) = TP/P = TP/(TP+FN)

    image

    P-R曲线

    Precision(查准率):P=TP/(TP+FP),即预测结果为正中正例出现的概率。

    Recall(查全率) :R=TP/(TP+FN),即正例被正确预测出来的概率。

    PR曲线,横坐标是Recall,纵坐标是precision。P-R曲线的横轴是召回率,纵轴是精确率。

    2.ROC曲线的绘制

    直观的绘制ROC曲线的方法,这边简单提一下。就是把横轴的刻度间隔设为1/N,纵轴的刻度间隔设为1/P

    ,N,P分别为负样本与正样本数量。然后再根据模型的输出结果降序排列,依次遍历样本,从0开始绘制ROC曲线,每遇到一个正样本就沿纵轴方向绘制一个刻度间隔的曲线,每遇到一个负样本就沿横轴方向绘制一个刻度间隔的曲线,遍历完所有样本点以后,曲线也就绘制完成了。究其根本,其最大的好处便是不需要再去指定阈值寻求关键点了,每一个样本的输出概率都算是一个阈值了。当然,无论是工业界还是学术界的实现,都不可能手动去绘制,下面就来讲一下如何用Python高效绘制ROC曲线。

    from sklearn.metrics import roc_curve, auc
    import numpy as np
    from sklearn import metrics
    #设定预测结果
    y = np.array([1,1,2,2])
    scores = np.array([0.1, 0.4, 0.35, 0.8])
    
    #roc_curve的输入为
    #y:样本标签
    #scores:模型对于样本属于正例的概率输出
    #pos_label:标记为正例的标签,本例中标记为2的即为正例
    fpr,tpr,thresholds = metrics.roc_curve(y, scores, pos_label = 2)
    #输出假阳概率
    fpr
    #输出真阳概率
    tpr
    #输出阈值
    thresholds
    
    #计算auc 输入为fpr,tpr
    auc = metrics.auc(fpr,tpr)
    auc
    
    #绘制ROC曲线
    import matplotlib.pyplot as plt
    plt.figure()
    lw=2 #线条粗细
    #plt.plot(fpr,tpr,color='darkorange',lw=lw, lable='ROC Curve (area = %0.2f)' % auc)
    plt.plot(fpr,tpr,color='darkorange',lw=lw,label='ROC Curve (area = %0.2f)' % auc)
    plt.plot([0,1],[0,1], color='navy', lw=lw, 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 example')
    plt.legend(loc='lower right')
    plt.show()
    
    ROC曲线示例

    参考文献
    【1】机器学习基础(1)- ROC曲线理解

    相关文章

      网友评论

          本文标题:ROC曲线

          本文链接:https://www.haomeiwen.com/subject/bbnmlktx.html