美文网首页
ROC和AUC定义和理解

ROC和AUC定义和理解

作者: HZKang | 来源:发表于2022-09-15 09:20 被阅读0次
    image

    ROC和AUC定义:ROC全称是“受试者工作特征”(Receiver Operating Characteristic)。ROC曲线的面积就是AUC(Area Under the Curve)。

    关键概念:首先要解释几个二分类问题中常用的概念:截断点,True Positive,False Positive...

    假设有一批test样本,这些样本只有两种类别:正例P和反例N。利用机器学习算法预测类别如下图:

    image

    TP(True Postive):预测类别是P(正例),真实类别也是P

    FP(False Postive):预测类别是P,真实类别是N(反例)

    TN(True Negative):预测类别是N,真实类别也是N

    FN(False Negative):预测类别是N,真实类别是P

    样本中的真实正例类别总数即TP+FN,样本中的真实反例类别总数为FP+TN。

    (1)TPR(True Positive Rate)即真阳性率,TPR =TP/(TP+FN)。代表分类器预测的正类中实际正实例占所有正实例的比例。——Sensitivity

    (2)FPR(False Positive Rate)即假阳性率,FPR=FP/(TN+FP)。代表分类器预测的正类中实际负实例占所有负实例的比例。——1-Specificity

    (3)TNR(True Negative Rate)即真阴性率,TNR=TN/(FP+TN)。代表分类器预测的负类中实际负实例占所有负实例的比例。——Specificity

    (4)

    image

    比方说在一个10000个人的数据集中,实际有100个人得了某种病症,你的任务是来预测哪些人得了这种病症。你预测出了200人得了癌症,其中: * TP,True Positive:得了癌症而且你也预测出来的病人有60人; * FP,False Positive:没有的癌症但是你预测得了癌症的有140人。 * TN,True Negative:没有得癌症并且你也预测对没有得癌症的有9760人;* FN,False Negative:得了癌症但是你没有预测出来的病人有40人;

    那么:

    True Positive Rate(TPR): 60/(60+40)=0.6

    False Positive Rate(FPR): 140/(9760+140)=0.0141

    accuracy: (9760+60)/10000=0.982

    precision: 60/(60+140)=0.3

    recall: 60/100=0.6

    简单的说,在上述癌症检测中(正反例极度不平衡的情况下),accuracy意义不大,从结果中可看出,因为正例比较少,所以检测再不怎么准确,其accuracy值都很高。recall则是相对于真实情况而言的,你正确检测了60例癌症病人,总癌症病人有100例,那么recall则为60%。precision则是相对于模型预测情况而言的,你预测了200例癌症病人,其中预测准确的有60例,那么precision则为30%;所以我们是希望能看到模型的recall和precision都很高,但是一般两者难以同时达到最优值,需要做一个权衡。——AUC和ROC可用来评判二分类的权衡,即评估算法模型的泛化能力。

    补充一个概念,截断点:机器学习算法对test样本进行预测后,算法模型对各个test样本属于某一分类的概率进行输出(或叫打分score)。若设定一个阈值(即截断点)为0.5,则认为打分大于或等于0.5的样本,它的预测类别都属于正例P,小于0.5就属于反例N。

    再计算该截断点下,预测与真实分类的TPR与FPR。——截断点取不同的值,TPR和FPR的计算结果也不同,就可以得到一系列坐标点。将截断点不同取值下对应(FPR,TPR)结果画于二维坐标系中得到的曲线,就是ROC曲线。横轴用FPR表示,纵轴为TPR。

    image

    随着阈值的逐渐减小,越来越多的实例被划分为正类,但是这些正类中同样也掺杂着真正的负实例,即TPR和FPR会同时增大。阈值最大时,对应坐标点为(0,0),阈值最小时,对应坐标点(1,1)。

    横坐标FPR(1-Specificity)越大,预测正类中实际负类越多。纵坐标TPR(Sensitivity 正类覆盖率)越大,预测正类中实际正类越多

    理想目标:就是对样本分类完全正确,即FP=0,FN=0。则FPR=0,TPR=1 即图中(0,1)点,故ROC曲线越靠拢(0,1)点,越偏离45度对角线越好,Sensitivity、Specificity越大效果越好。

    AUC值就相当于ROC曲线的所覆盖的面积,可以从ROC曲线看出AUC值越大,其分类效果越好。

    以一个简单的模拟数据来计算下ROC曲线每个点的值——

    先有一组真实分类,比如0,1,0,1(0表示N,1表示P);然后模型对4个样本进行预测打分(score),比如:0.2,0.3,0.5,0.8

    score即各个样本属于P正例的概率。将上述打分排序,然后依次取为截断点,计算每个样本输出概率下的FPR和TPR:

    (1)首先截断点为0.2

    说明score>=0.2时,则样本的预测类别就为正例,因为4个样本的score都>=0.2,所以均为正例,这时的TPR=1,FPR=1

    image

    (2)截断点为0.3,因此当概率大于等于0.3时预测为P正例,因此样本1score小于0.3,预测为反例;样本2-4都为正例,这时的TPR=1,FPR=0.5

    [图片上传中...(image-e83359-1663291219423-3)]

    (3)截断点0.5时,因为4个样本的score有2个大于等于0.5。所以,所有样本的预测类有2个为P(1个预测正确,1一个预测错误);2个样本被预测为N(1个预测正确,1一个预测错误)。TPR=0.5,FPR=0.5

    [图片上传中...(image-831553-1663291219423-2)]

    (4)当为0.8时,说明只要score>=0.8,它的预测类别就是P。所以,所有样本的预测类有1个为P(1个预测正确);3个样本被预测为N(2个预测正确,1一个预测错误)。TPR=0.5,FPR=0

    [图片上传中...(image-6c1095-1663291219423-1)]

    将结果中的FPR与TPR画到二维坐标中,得到的ROC曲线如下(蓝色线条表示),ROC曲线的面积用AUC表示(淡黄色阴影部分)。

    [图片上传中...(image-1b7781-1663291219423-0)]


    上述计算方法可看出,ROC一般是只用于二分类器的预测评价;我们也可以用工具来检验下上述的计算结果,Python可以用sklearn,R可以用ROCR包或者pROC包,这里以ROCR包来检验下上述计算结果:

    
    library(ROCR)
    
    y <- c(0,1,0,1)
    
    p <- c(0.2,0.3,0.5,0.8)
    
    pred <- prediction(p, y)
    
    perf <- performance(pred, "tpr", "fpr")
    
    perf
    
    > perf
    
    An object of class "performance"
    
    Slot "x.name":
    
    [1] "False positive rate"
    
    Slot "y.name":
    
    [1] "True positive rate"
    
    Slot "alpha.name":
    
    [1] "Cutoff"
    
    Slot "x.values":
    
    [[1]]
    
    [1] 0.0 0.0 0.5 0.5 1.0
    
    Slot "y.values":
    
    [[1]]
    
    [1] 0.0 0.5 0.5 1.0 1.0
    
    Slot "alpha.values":
    
    [[1]]
    
    [1] Inf 0.8 0.5 0.3 0.2
    
    

    https://www.plob.org/article/22895.html

    https://www.plob.org/article/22905.html

    https://www.plob.org/article/22899.html

    相关文章

      网友评论

          本文标题:ROC和AUC定义和理解

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