精华内容
下载资源
问答
  • PR曲线

    2020-12-17 16:45:11
    文章目录流程生成假数据PR计算绘图 流程 一组数据,已知类别和预测得分,按得分排序 将得分的各个值作为阈值,计算精确率和召回率 绘制图像 生成假数据 数据:label,score 假数据中 score大于0.5,则label以70%取...

    流程

    1. 一组数据,已知类别和预测得分,按得分排序
    2. 将得分的各个值作为阈值,计算精确率和召回率
    3. 绘制图像

    生成假数据

    数据:label,score

    假数据中 score大于0.5,则label以70%取‘t’,以此类推

    import random
    
    data = []
    for i in range(200):
        score = random.random()
        if score > 0.5:
            if random.random() > 0.3:
                label = 't'
            else:
                label = 'f'
        else:
            if random.random() > 0.7:
                label = 't'
            else:
                label = 'f'
        data.append([label, score])
    
    data.sort(key=lambda x:x[1])
    for label, score in data:
        print(f'label: {label}, score: {score:.2f}')
        
    ################ print ####################
    label: f, score: 0.09
    label: t, score: 0.14
    label: t, score: 0.15
    label: f, score: 0.23
    label: f, score: 0.28
    label: f, score: 0.32
    label: f, score: 0.37
    label: t, score: 0.40
    label: t, score: 0.46
    label: f, score: 0.48
    label: f, score: 0.50
    label: t, score: 0.68
    label: t, score: 0.70
    label: t, score: 0.73
    label: f, score: 0.75
    label: t, score: 0.78
    label: f, score: 0.84
    label: f, score: 0.85
    label: t, score: 0.89
    label: t, score: 0.90
    
    进程已结束,退出代码0
    
    

    PR计算

    def pr_eavl(data, score):
        data.sort()
        tp = len([i for i in data if i[0]=='t' and i[1]>score])
        fp = len([i for i in data if i[0]=='f' and i[1]>score])
        tn = len([i for i in data if i[0]=='f' and i[1]<score])
        fn = len([i for i in data if i[0]=='t' and i[1]<score])
    
        p = tp / (tp + fp)
        r = tp / (tp + fn)
        
        return p, r
    

    绘图

    from matplotlib import pyplot as plt
    
    p_list = []
    r_list = []
    for i in data:
        p, r = pr_eavl(data, i[1])
        p_list.append(p)
        r_list.append(r)
    
    plt.scatter(p_list, r_list)
    plt.xlabel('p')
    plt.ylabel('r')
    plt.show()
    

    在这里插入图片描述

    展开全文
  • 下面来看一下ROC和PR曲线(以下内容为自己总结): 1、ROC曲线: ROC(Receiver Operating Characteristic)曲线是以假正率(FP_rate)和真正率(TP_rate)为轴的曲线,ROC曲线下面的面积我们叫做AUC,如下图所示:...

    增注:虽然当时看这篇文章的时候感觉很不错,但是还是写在前面,想要了解关于机器学习度量的几个尺度,建议大家直接看周志华老师的西瓜书的第2章:模型评估与选择,写的是真的很好!!

    以下第一部分内容转载自:机器学习算法中的准确率(Precision)、召回率(Recall)、F值(F-Measure)是怎么一回事

    摘要:

    数据挖掘、机器学习和推荐系统中的评测指标—准确率(Precision)、召回率(Recall)、F值(F-Measure)简介。

    引言:

    在机器学习、数据挖掘、推荐系统完成建模之后,需要对模型的效果做评价。

    业内目前常常采用的评价指标有准确率(Precision)、召回率(Recall)、F值(F-Measure)等,下图是不同机器学习算法的评价指标。下文讲对其中某些指标做简要介绍。

    这里写图片描述

    本文针对二元分类器!
    本文针对二元分类器!!
    本文针对二元分类器!!!

    对分类的分类器的评价指标将在以后文章中介绍。

    在介绍指标前必须先了解“混淆矩阵”:

    混淆矩阵

    True Positive(真正,TP):将正类预测为正类数

    True Negative(真负,TN):将负类预测为负类数

    False Positive(假正,FP):将负类预测为正类数误报 (Type I error)

    False Negative(假负,FN):将正类预测为负类数→漏报 (Type II error)

    这里写图片描述

    这里写图片描述

    1、准确率(Accuracy)

    准确率(accuracy)计算公式为:
    这里写图片描述

    注:准确率是我们最常见的评价指标,而且很容易理解,就是被分对的样本数除以所有的样本数,通常来说,正确率越高,分类器越好。
    准确率确实是一个很好很直观的评价指标,但是有时候准确率高并不能代表一个算法就好。比如某个地区某天地震的预测,假设我们有一堆的特征作为地震分类的属性,类别只有两个:0:不发生地震、1:发生地震。一个不加思考的分类器,对每一个测试用例都将类别划分为0,那那么它就可能达到99%的准确率,但真的地震来临时,这个分类器毫无察觉,这个分类带来的损失是巨大的。为什么99%的准确率的分类器却不是我们想要的,因为这里数据分布不均衡,类别1的数据太少,完全错分类别1依然可以达到很高的准确率却忽视了我们关注的东西。再举个例子说明下。在正负样本不平衡的情况下,准确率这个评价指标有很大的缺陷。比如在互联网广告里面,点击的数量是很少的,一般只有千分之几,如果用acc,即使全部预测成负类(不点击)acc也有 99% 以上,没有意义。因此,单纯靠准确率来评价一个算法模型是远远不够科学全面的。

    2、错误率(Error rate)

    错误率则与准确率相反,描述被分类器错分的比例,error rate = (FP+FN)/(TP+TN+FP+FN),对某一个实例来说,分对与分错是互斥事件,所以accuracy =1 - error rate。

    3、灵敏度(sensitive)

    sensitive = TP/P,表示的是所有正例中被分对的比例,衡量了分类器对正例的识别能力。

    4、特效度(specificity)

    specificity = TN/N,表示的是所有负例中被分对的比例,衡量了分类器对负例的识别能力。

    5、精确率、精度(Precision)

    精确率(precision)定义为:
    这里写图片描述

    表示被分为正例的示例中实际为正例的比例。

    6、召回率(recall)

    召回率是覆盖面的度量,度量有多个正例被分为正例,recall=TP/(TP+FN)=TP/P=sensitive,可以看到召回率与灵敏度是一样的。

    7、综合评价指标(F-Measure)
    P和R指标有时候会出现的矛盾的情况,这样就需要综合考虑他们,最常见的方法就是F-Measure(又称为F-Score)。
    F-Measure是Precision和Recall加权调和平均:
    这里写图片描述
    当参数α=1时,就是最常见的F1,也即
    这里写图片描述
    可知F1综合了P和R的结果,当F1较高时则能说明试验方法比较有效。

    8、其他评价指标

    计算速度:分类器训练和预测需要的时间;

    鲁棒性:处理缺失值和异常值的能力;

    可扩展性:处理大数据集的能力;

    可解释性:分类器的预测标准的可理解性,像决策树产生的规则就是很容易理解的,而神经网络的一堆参数就不好理解,我们只好把它看成一个黑盒子。

    下面来看一下ROC和PR曲线(以下内容为自己总结):

    1、ROC曲线:
    ROC(Receiver Operating Characteristic)曲线是以假正率(FP_rate)和真正率(TP_rate)为轴的曲线,ROC曲线下面的面积我们叫做AUC,如下图所示:
    图片根据Paper:Learning from eImbalanced Data画出

    图片根据Paper:Learning from eImbalanced Data画出

    其中: TPrate=TPPcTP_{rate}=\frac{TP}{P_c}TPrate=PcTP, FPrate=FPNcFP_rate=\frac{FP}{N_c}FPrate=NcFP
    (1)曲线与FP_rate轴围成的面积(记作AUC)越大,说明性能越好,即图上L2曲线对应的性能优于曲线L1对应的性能。即:曲线越靠近A点(左上方)性能越好,曲线越靠近B点(右下方)曲线性能越差。
    (2)A点是最完美的performance点,B处是性能最差点。
    (3)位于C-D线上的点说明算法性能和random猜测是一样的–如C、D、E点。位于C-D之上(即曲线位于白色的三角形内)说明算法性能优于随机猜测–如G点,位于C-D之下(即曲线位于灰色的三角形内)说明算法性能差于随机猜测–如F点。
    (4)虽然ROC曲线相比较于Precision和Recall等衡量指标更加合理,但是其在高不平衡数据条件下的的表现仍然过于理想,不能够很好的展示实际情况。

    2、PR曲线:
    即,PR(Precision-Recall)曲线。
    举个例子(例子来自Paper:Learning from eImbalanced Data):
    假设N_c>>P_c(即Negative的数量远远大于Positive的数量),若FP很大,即有很多N的sample被预测为P,因为FPrate=FPNcFP_{rate}=\frac{FP}{N_c}FPrate=NcFP,因此FP_rate的值仍然很小(如果利用ROC曲线则会判断其性能很好,但是实际上其性能并不好),但是如果利用PR,因为Precision综合考虑了TP和FP的值,因此在极度不平衡的数据下(Positive的样本较少),PR曲线可能比ROC曲线更实用。

    展开全文
  • PR曲线详解

    万次阅读 2020-08-13 08:54:38
    目录PR曲线概念precision(精准率)和recall(召回率)PR曲线功能说明 PR曲线概念 PR曲线中的P代表的是precision(精准率),R代表的是recall(召回率),其代表的是精准率与召回率的关系,一般情况下,将recall设置...

    PR曲线概念

    PR曲线中的P代表的是precision(精准率),R代表的是recall(召回率),其代表的是精准率与召回率的关系,一般情况下,将recall设置为横坐标,precision设置为纵坐标。

    precision(精准率)和recall(召回率)

    上述中介少了PR曲线的实质代表为precision(精准率)和recall(召回率),但是这二者是什么呢?下面咱们进行相关的讲述。
    首先,我们了解一下混淆矩阵,如下表。
    在这里插入图片描述
    其中,把正例正确地分类为正例,表示为TP(true positive),把正例错误地分类为负例,表示为FN(false negative)。把负例正确地分类为负例,表示为TN(true negative), 把负例错误地分类为正例,表示为FP(false positive)。
    从混淆矩阵可以得出精准率与召回率:
    precision = TP/(TP + FP)
    recall = TP/(TP +FN)

    PR曲线功能说明

    一条PR曲线要对应一个阈值(统计学的概率)。通过选择合适的阈值(比如K%)对样本进行合理的划分,概率大于K%的样本为正例,小于K%的样本为负例,样本分类完成后计算相应的精准率和召回率,最后我们会得到对应关系,如下图所示。
    在这里插入图片描述
    在众多学习器对数据进行学习后,如果其中一个学习器的PR曲线A完全包住另一个学习器B的PR曲线,则可断言A的性能优于B。但是A和B发生交叉,那性能该如何判断呢?我们可以根据曲线下方的面积大小来进行比较,但更常用的是平衡点F1。平衡点(BEP)是P=R时的取值(斜率为1),F1值越大,我们可以认为该学习器的性能较好。F1的计算如下所示:
    F1 = 2 * P * R /( P + R )

    展开全文
  • ROC曲线和PR曲线

    2019-08-03 22:32:49
    一 ROC曲线 1. 什么是ROC曲线? 2. 曲线的性质 ...三 ROC曲线和PR曲线的适用场景 1. ROC适用 2. PR适用 总结: ROC 曲线可以用来评价分类器的效果好坏, 其横轴表示假警报率(聚焦于负例), 纵轴...

    一 ROC曲线

    1. 什么是ROC曲线?

    2. 曲线的性质

    3. ROC曲线的绘制:

    4. ROC曲线的优点

    5. ROC曲线的缺点

    6. AUC值

    二 PR曲线

    1. 什么是PR曲线

    2. PR曲线的绘制

    三 ROC曲线和PR曲线的适用场景

    1. ROC适用

    2. PR适用


    总结:

    ROC 曲线可以用来评价分类器的效果好坏, 其横轴表示假警报率(聚焦于负例), 纵轴表示命中率(聚焦于正例),ROC曲线越接近于左上角越好

    PR曲线也用来评估分类器的好坏, 横轴表示命中率(TPR召回率), 纵轴表示精确率(Precision), 曲线越接近右上角越好

    AUC值是ROC曲线或者PR曲线的线下面积, 在衡量分类器效果时比曲线更加直观, 值越大说明分类器效果越好.

    二者适用不同场景: ROC受类别分布变化影响小,适用于剔除类别分布变化影响来对分类器进行评估;

                                            聚焦于正例\负例,所以适用于衡量分类器整体性能

                                   PR   适合评估类别分布不变的情况下, 分类对于正例的预测效果

                                           类别不平衡的时候, ROC过于乐观对于FP变大不敏感

    一 ROC曲线

    1. 什么是ROC曲线?

    横坐标: 假正率(FP rate, FPR),  FPR= \frac{FP}{FP+TN },  代表所有负样本错误预测为正样本的概率---假警报率

    纵坐标: 真正率(TP rate, TPR), TPR= \frac{TP}{TP+FN},   代表所有正样本正确预测为正样本的概率---命中率

    [其中:

    TP:正确的肯定数目

    FN:漏报,没有找到正确匹配的数目

    FP:误报,没有的匹配不正确

    TN:正确拒绝的非匹配数目]

    2. 曲线的性质

    • 曲线越接近于左上角(0,1), 越偏离45度对角线, 说明分类器的性能越好.(真正理想的情况是TPR接近与1, FPR接近于0)
    • 对角线代表的是随机猜测模型(预测正确或者错误的概率相同,只与threshhold的设定有关)

    3. ROC曲线的绘制:

    假设对于一个二分类模型, 采用逻辑回归分类器, 其给出针对每个实例为正类的概率, 那么通过设定一个阈值(如:0.6). 概率大于等于0.6的为正类, 概率小于0.6的为负类. 对应的就可以计算出一组(FPR, TPR), 在平面上得出对应的坐标点.

    随着阈值的逐渐减少, 越来越多的实例被划分为正类, 但是这些预测的正实例中也会掺杂着真正的负实例(所以FP增加, TN减少&&TP增加, FN减少), 所以假警报率和命中率都会升高. 

    4. ROC曲线的优点

    当测试集中的正负样本的分布变化的时候, ROC曲线能够保持不变.

    因为命中率 (TPR =\frac{TP}{TP+FN}), 聚焦于正例;  假警报率  (FPR =\frac{FP}{FP+TN }), 聚焦于负例. 所以即使正例或负例的比例发生变化也不会影响二者的值,  ROC曲线也不会产生大的变化, 而precision使用的TP和FP就分属于两类, 则易受类别分布改变的影响.

    5. ROC曲线的缺点

    如果负例增加了很多(TN增加),而曲线却没变. 说明FP增加了很多. 结果是虽然大量负例被错判成正例,在ROC曲线上却无法直观地看出来。

    [

    举个例子:

    对于ROC曲线:

    假设数据集中有正例20个, 负例10000.

    开始时有20个负例被错判, FPR =\frac{20}{10000}=0.002

    接着又有20个负例被错判, FPR =\frac{20+20}{10000}=0.004, 这个变化在ROC曲线上的变化是很细微的

    对于PR曲线: (假设TP=20)

    Precision =\frac{20}{20+20}=0.5

    Precision =\frac{20}{20+40}=0.33, 这个变化在PR上的变化是比较大的

    ]

    6. AUC值

    AUC值是ROC曲线下的面积, 显然这个面积不会超过1.又由于ROC曲线一般都位于对角线的上方,所以其面积不会小于0.5

    所以有 0.5\leq AUC\leq 1

    为什么要使用AUC值作为评价标准?

    因为曲线很多时候并不能清晰的说明哪个分类器的效果更好, 而AUC作为一个数值越大说明分类器的效果越好, 可以更加直观.

    二 PR曲线

    1. 什么是PR曲线

    即是精确率和召回率(命中率)曲线,

    https://img1.mukewang.com/5b5d2c4d00016b4406860404.jpg

    横轴: 召回率(TPR)                 TPR =\frac{TP}{TP+FN}

    纵轴: 精确率(Precision)         TPR =\frac{TP}{TP+FP}

    与ROC曲线的相同点是都采用了TPR, 都可以用AUC值来衡量分类器的效果.不同的是ROC曲线使用FPR而PR曲线使用Precision,也就是说PR曲线的横纵轴都主要关心正例, 所以普遍认为PR优于ROC.

    [对于上面例子中的数据:

    https://img4.mukewang.com/5b5d2c430001e2a606600407.jpg

    可以看出,上文中ROC曲线下的AUC值为0.8左右,而PR曲线的值为0.6左右. 所以在类别不平衡问题中, ROC曲线会做出比较乐观的估计,而PR曲线由于使用Precision会不断显现出FP的影响.

    ]

    2. PR曲线的绘制

    与ROC曲线的绘制方法相同, 即通过设定不同的阈值得到测试样本的分类结果, 然后计算出PR曲线的坐标点(精确率, 召回率)

    阈值的设定(曲线上坐标点的获取)

    分类器对样本进行分类的时候会给出每个样本是正例的置信度, 通过设定置信度阈值来决定哪些是正例哪些是负例.(例如: 设定阈值为0.5, 则大于等于0.5的预测为正例, 小于0.5的预测为负例)

    具体方法

    则根据置信度就可以对测试样本进行排序, 然后再逐个样本的选择阈值(划分点), 在该样本之前的都属于正例, 在该样本之后的都属于负例. 每一个样本的置信度作为划分阈值时, 都可以计算其相应的精确率和召回率, 因此可以绘制出PR曲线.

    三 ROC曲线和PR曲线的适用场景

    1. ROC适用

    1. ROC曲线兼顾正例和负例, 所以适用于评估分类器的整体性能,相比之下PR曲线完全聚焦于正例.

    2. 如果有多份数据存在不同的类别分布,这个时候如果想单纯的比较分类的器的性能且剔除类别分布改变的影响,则ROC比较适合

    2. PR适用

    1. 想要评估在相同的类别分布正例的预测情况

    2. 类别不平衡问题中, ROC曲线会给出较乐观的估计,所以大部分时候还是PR更好

     

    参考资料:

    https://www.imooc.com/article/48072   机器学习之类别不平衡问题 (2) —— ROC和PR曲线

     

     

    展开全文
  • PR曲线与ROC曲线

    2021-03-18 20:07:49
    PR曲线概念 PR曲线中的P代表的是precision(精准率),R代表的是recall(召回率),其代表的是精准率与召回率的关系,一般情况下,将recall设置为横坐标,precision设置为纵坐标。 PR曲线功能说明 一条PR曲线要对应...
  • PR曲线和ROC曲线理解

    千次阅读 2019-08-30 23:26:21
    PR曲线和ROC曲线是数据挖掘中2个常见的评估指标(对于二分器而言),理解如下: 一、pr曲线: 1)y轴为precision,x轴为recall。 2)pr曲线上各个取值为当前p下,样本判断结果:大于p的为正样本,反之为负样本。 ...
  • 说说PR曲线

    2020-05-12 19:50:19
    说到PR曲线和ROC的区别,我觉得一半的人能一时半会还是懵逼的,为啥呢,这两个概念看似很简单,但是真的理解起来,可不是随便回答一下字面上的意思就可以了。那么PR曲线和ROC曲线的差别在哪里呢? 问题解决 首先明确...
  • 3 ROC曲线和PR曲线和AUG

    2021-04-09 11:58:39
    ROC曲线和PR曲线和AUG ROC曲线和PR曲线 一、ROC曲线和PR曲线各是什么? PR(Precision - Recall)曲线 ROC(receiver operating characteristic)曲线 二、编程实现AUC的方法,并指出复杂度? 三、AUC指标有什么...
  • PR曲线和ROC曲线

    2019-08-10 17:31:04
    ROC曲线和PR曲线均为类别不平衡问题中常用的评估方法。 ROC曲线纵坐标是真阳性率(TPR),也就是召回率,横坐标是假阳性率。 TPR = TP/(TP+FN),FPR=FP/(FP+TN),可以看到TPR是关于正例的,来多少正例正确识别的比例...
  • 显著性检测PR曲线

    2018-06-08 10:34:18
    显著性检测中画PR曲线的代码,需要自己生成的显著图和Ground Truth。
  • 参考文献 [1]PR曲线和ROC曲线概念及其区别 [2]python计算PR曲线sklearn.metrics.precision_recall_curve [3]为什么平均精准度(Average Precision,AP)就是PR曲线的线下面积?
  • PG_ROC_PR_R 使用 R 的 ROC 和 PR 曲线
  • PR曲线,横轴是Recall,纵轴是Precision,变化值是阈值。 Lift曲线,提升指数曲线。 其中, 几种曲线形状展示: ROC曲线【参考图】 K-S曲线【参考图】 PR曲线 Lift曲线【参考图】 ...
  • yolo画pr曲线图.zip

    2020-04-29 13:13:07
    可以画yolo算法的pr曲线图 并计算精确率里面包括四个文件 分别对用python不同版本 python2 和python3 我自己用是好用的 有问题可以留言交流
  • PR曲线实则是以precision(精准率)和recall(召回率)这两个为变量而做出的曲线,其中recall为横坐标,precision为纵坐标。 那么问题来了,什么是精准率?什么是召回率?这里先做一个解释。 在二分类问题中,分
  • ROC和PR曲线

    千次阅读 2019-06-21 19:39:28
    本篇文章先给出ROC曲线的概述、实现方法、优缺点,再阐述PR曲线的各项特点,最后给出两种方法各自的使用场景。 ROC曲线 ROC曲线常用于二分类问题中的模型比较,主要表现为一种真正例率 (TPR) 和假正例率 (FPR)...
  • ROC曲线与PR曲线的关系 简介 ROC曲线 在正负样本不平衡时,Acurracy常常不能很好地反映模型的真实分类能力,而此时ROC曲线的AUC经常被来评价模型的效果。因为ROC曲线关注的是TPR(y轴;有多少比例的正样本被识别出来...
  • 目标检测的PR曲线

    2021-05-11 15:57:20
    AP不是准确率,应该说是PR曲线下的面积,同时表征了查准率(precise)和查全率(Recall) 查准率:TP/(TP+FP) 查全率:TP/(TP+FN) 那么如何调整查准率或者查全率以得到上面的PR曲线呢? ——置信度阈值 对于某一类,假设...
  • 【Python】绘制PR曲线

    2021-01-12 15:50:12
    基于此,可以绘制PR曲线,python绘制PR曲线比较方便。 首先,可以使用precision_recall_curve函数得到 #选择测试数据 import pandas as pd df = pd.read_csv('file_name.csv') X = df[df.columns[:-1]] y = df[df....
  • ROC曲线、PR曲线

    千次阅读 2015-05-20 13:20:30
    在论文的结果分析中,ROC和PR曲线是经常用到的两个有力的展示图。 1.ROC曲线 ROC曲线(receiver operating characteristic)是一种对于灵敏度进行描述的功能图像。ROC曲线可以通过描述真阳性率(TPR)和假阳性...
  • 用于yolo计算mAP和PR曲线使用,里面有4个python文件,分为python2和python3版本
  • PR曲线计算方法

    千次阅读 2019-05-30 16:31:49
    关于precision和recall: https://www.jianshu.com/p/54ed63a7f816 ...这两篇写得很详细,如何计算精度和召回率。 关于PR曲线的绘制: https://www.cnblogs.com/zf-blog/p/6734686.html ...
  • 文章目录Roc曲线和PR曲线的理解及简单的代码实现1.引言2.几个度量的介绍与理解3.PR曲线的理解4.Roc曲线的理解5.简要代码绘制两种曲线 Roc曲线和PR曲线的理解及简单的代码实现 1.引言 Roc曲线和PR曲线常被用来在二...
  • Roc曲线和PR曲线常被用来在二分类问题中评估一个分类器的性能,所以在机器学习中搞清楚两种曲线的原理及其区别与实现是非常基础也是非常重要的。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 953
精华内容 381
关键字:

pr曲线