前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >AUC、ROC详解:原理、特点&算法

AUC、ROC详解:原理、特点&算法

作者头像
公众号-不为谁写的歌
发布于 2020-09-08 13:05:11
发布于 2020-09-08 13:05:11
5.7K00
代码可运行
举报
文章被收录于专栏:桃花源记桃花源记
运行总次数:0
代码可运行

前言

接收者操作特征曲线(ROC)可以用来对分类器的表现可视化,可以依据分类器在ROC上的表现来选择最终的模型。

分类性能TP、FP、TN、FN

以二分类问题为例,每个实例I将会被映射到正例和负例上{p,n}。模型会将每个实例一个预测结果,结果可能是连续的,也可能是离散的;对于连续的结果,需要根据阈值再进行分类。为了和分类标签区分,我们使用{Y,N}表示每个样本的预测结果。

给定一个分类器和一个样本,会有4个输出。如果样本是正例而且被预测为正例,则归为TP;如果被预测为负例,则归为FN;如果样本是负例而且被预测为正例,则归为FP;如果被预测为负例,则归为TN。给定一个分类器以及一个测试集,我们可以根据这4种情况,将预测结果进行分类,得到一个混淆矩阵:

真阳率,又称为recall,召回率(查全率)

表示在预测的正例中真正的正例TP占所有正例P的比例,是一个覆盖面的度量。eg:分类器可以将所有测试集都预测为正例,这样tp rate(recall)=1,表示所有的正例都预测出来了,虽然会有误报FP的存在。

假阳率:

表示被错误归为正例的负例即FP占所有负例的比例。

precision,查准率,预测为正例中真正正例所占的比例。

ROC空间

ROC曲线图有两个维度,横轴表示fp rate,纵轴表示tp rate。ROC表示了在收益(true positives)和成本(false positives)之间的权衡关系。

在ROC曲线中,需要注意几个点。左下角的(0, 0)表示分类器将所有测试集都预测为负例,从不做正类预测,所以tp rate、fp rate均为0;另一个极端是右上角的(1,1),表示分类器将所有的测试集都预测为正例,因此tp rate、fp rate均为1。最佳的分类点是(0,1),表示分类器将所有的正例、负例都准确地预测,TP=P, FP=0,TN=N, FN=0。在上图中分类器D的表现最好接近(0,1)点。

一般来说,在ROC空间中一个点越接近西北方即(0,1)点表现会越好(tp rate更高,fp rate更低)。

出现在ROC图中左侧的分类器,离X轴越近的分类时越保守,只有当证据非常充足时才会预测为正例(以逻辑回归来说,分类阈值越大,越保守-只有当f(x) > 0.9时才会归为正类),因此假阳率也会很低,false postive很少。在ROC图中越靠近右上方,分类器越激进,只有满足很松的条件就被归为正例,因此tp rate会很高;相应的,被错误归为正例的负例false positiv也会很高。在上图中分类器A比B更保守。在实际的很多问题中,负例的数量远远大于正例,因此,ROC左侧的分类器会更加受关注

上图中的直线y=x表示采取随机猜测的分类器,类似于抛硬币。比如点(0.5, 0.5)表示预测过程中对样本一般时间预测为正例、一般时间预测为负例。(0.9,0.9)表示预测过程中90%的时间将样本预测为正例。最后得到y=x这样的曲线。点C接近于(0.7,0.7)表示在预测过程70%预测为正例。

假设对于包含M个样本的测试集中有P个正样本、N个负样本;如果测试集是随机抽样的话,正负样本的比例是不变的。如果分类器在分类过程中90%的时间都将测试集中样本预测为正例,那预测为正例的样本有0.9M个,预测负例有0.1M个;从tp_rate, fp_rate的计算公式我们可以知道,两者分别是在所有正例P、所有负例N空间上计算的,两个分子之和等于预测为正例的样本数0.9M。无论分类器对测试集如何预测,改变的总是分子,而不同的预测方式,改变的是tp、fp,但两者的比例一般不变;所以,如果分类器90%时间都将结果预测为正例tp、fp都扩大相应的比例,tp_rate=0.9, fp_rate=0.9。

在ROC曲线中处于y=x直线下的分类器表现比随机猜测还要差。一般情况下,ROC曲线由y=x构成的下三角形是空的。如果分类器处于右下方,接近x轴,我们可以将模型的预测结果反着来[取反],就可以将roc的点搬到y=x左上方去。反着来,原来预测的正类变为负类,负类变正类;TP变FN,FP变TN。上图中分类器E比随机猜测效果还要差,实际上这个分类器是分类器B的取反结果。

处于y=x上的分类器没有利用到样本的信息;处于y=x下方的分类器利用到了样本的信息,不过没有准确的使用。

ROC曲线

很多分类器,如决策树、关联规则,在分类时直接给出分类结果,或者说模型输出是离散的,{Y,N}。当这样的模型对于测试集进行预测时,根据结果我们可以得到一个混淆矩阵,进而得到ROC空间上的一个点

对于输出是连续值的分类器,如朴素贝叶斯、神经网络模型,对每个样本能给出一个概率值,或者一个得分score,表示样本属于某个分类的可信度。如果结果是概率值,表示样本属于正类的概率;如果为score,没有经过归一化,这种情况socore越高表示属于正例的概率越大。

对于这类排序、打分的分类器,通过设置一个threshold,可以得到分类结果:如果高于阈值,归为正类Y;低于阈值,归为负类N。设置每个不同的阈值,我们可以得到不同的混淆矩阵,进而在ROC空间中能得到不同的点,连接之后可以得到ROC曲线。比如,我们可以将阈值在(−∞-\infty−∞, +∞\infty∞)间取值。

给定包含10个正类、10个负类的测试集;根据分类器预测的得分对20个样本进行降序排序(排序即可,无所谓降序、升序),然后采用不同的阈值即可得到上述的ROC曲线。从图中我们可以看到这个曲线实际上更像是一个阶跃函数折线图,这是因为测试集样本太少导致的,当测试样本增加时,ROC曲线会更加平滑。当阈值设置为正无穷时,得到点(0,0);阈值为负无穷时,可以得到(1,1);阈值为0.9时,可以得到(0,0.1)。当分类阈值不断降低时,对应模型在ROC空间中从保守区域逐渐移动到激进区域

ROC曲线的最重要的特点是可以对分类模型产生的排序得分能力进行测量[排序得分,得分的准确性并不重要,关注的是不同类别得分之间的相对大小关系]。分类器不需要产生非常精准的、经过归一化的概率得分;只要保证产生的得分能准确地区分正例、负例即可。[正因为这个原因,AUC也只是衡量模型排序能力的指标,不能保证模型预测的精准性;比如在ctr预估中,不能保证pctr接近ctr,可以保证正例的pctr,高于负例的ctr。如果ctr,用于计算广告中,ctr直接参与竞价,并不能保证准确性,一般要经过calibration,保证与真实ctr不会偏离太多]。

The ROC curve shows the ability of the classifier to rank the positive instances relative to the negative instances, and it is indeed perfect in this ability.

ROC曲线对类别分布的变化不敏感。如果测试集中的正负样本比例发生改变,ROC曲线也不会变化。原因在于,roc曲线的横纵坐标fp rate, tp rate分别在标签为负类、正类中计算,正负样本比例发生变化,对应tp、fp也会发生相应的变化,tp_rate/fp_rate可能会保持不变。

ROC曲线绘制方法

roc曲线的绘制主要就是需要找到图像中的各个坐标点,所以这个算法的主要目的就是找到ROC的各个坐标点。

输入:测试集L,f(i)表示分类器对样本i的预估分数;P,N分别表示正类、负类的样本数。

输出:R,ROC曲线的坐标点,通过fp_rate进行排序。

步骤:

  • 将测试集L根据分类器的得分f进行降序排序,得到LsortedL_{sorted}Lsorted​
  • 初始化FP、TP为0
  • 声明返回结果列表R
  • 设定fprev=−∞f_{prev} = -\inftyfprev​=−∞ [给定一个不会重复的初始值即可]
  • i = 1[逐步进行循环]
  • 遍历LsortedL_{sorted}Lsorted​
    • 如果f(i)≠fprevf(i) \neq f_{prev}f(i)​=fprev​, 说明找到一个新的坐标点,计算坐标
      • (FPN,TPP)(\frac{FP}{N}, \frac{TP}{P})(NFP​,PTP​),将点加入到R列表中
      • 更新fprev=f(i)f_{prev}=f(i)fprev​=f(i)
    • 更新TP、FP
    • 如果Lsorted(i)L_{sorted}(i)Lsorted​(i)为正类:TP = TP + 1;
    • 如果为负类:FP = FP + 1
    • i += 1
  • 计算最后一个坐标(FPN,TPP)(\frac{FP}{N}, \frac{TP}{P})(NFP​,PTP​)

得到坐标列表R后,可以根据坐标点得到最终的ROC曲线。

AUC计算伪代码

AUC的计算过程和ROC曲线的绘制算法相似,不同之处在于每次不再是向列表中添加坐标点,而是计算一个梯形面积,通过面积的不断叠加,从而得到最终的AUC指标。

AUC表示的ROC曲线包围的面积,AUC的取值范围[0,1]之间。计算这个面积,理论上可以使用积分法,但是也可以通过叠加各个小梯形的面积来得到。

AUC是ROC曲线包围的面积,也继承了ROC本身的特点,是一种衡量模型排序能力的指标,等效于–对于任意一对正负例样本,模型将正样本预测为正例的可能性大于 将负例预测为正例的可能性的概率。

还是推荐第一种计算方法。顺便给出一个Python代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def scoreAUC(num_clicks, num_shows, predicted_ctr):
    # 降序排序
	i_sorted = sorted(range(len(predicted_ctr)),key=lambda i: predicted_ctr[i],reverse=True)
    auc_temp = 0.0
    click_sum = 0.0
    old_click_sum = 0.0
    no_click = 0.0
    no_click_sum = 0.0

    last_ctr = predicted_ctr[i_sorted[0]] + 1.0

    for i in range(len(predicted_ctr)):
        if last_ctr != predicted_ctr[i_sorted[i]]:
            # 累加小梯形面积
            auc_temp += (click_sum+old_click_sum) * no_click / 2.0
            old_click_sum = click_sum
            no_click = 0.0
            last_ctr = predicted_ctr[i_sorted[i]]
        # 小梯形的高
        no_click += num_shows[i_sorted[i]] - num_clicks[i_sorted[i]]
        # N
        no_click_sum += num_shows[i_sorted[i]] - num_clicks[i_sorted[i]]
        # P
        click_sum += num_clicks[i_sorted[i]]
    # 最后一个小梯形
    auc_temp += (click_sum+old_click_sum) * no_click / 2.0
    # 归一化,分母
    total_area = click_sum * no_click_sum
    if total_area == 0: auc = 1
    else:
        auc = auc_temp / total_area
    return auc

Reference

An introduction to ROC analysis

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/09/06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ROC及AUC计算方法及原理「建议收藏」
在大多数情况下不同类别的分类代价并不相等,即将样本分类为正例或反例的代价是不能相提并论的。例如在垃圾邮件过滤中,我们希望重要的邮件永远不要被误判为垃圾邮件,还有在癌症检测中,宁愿误判也不漏判。在这种情况下,仅仅使用分类错误率来度量是不充分的,这样的度量错误掩盖了样本如何被错分的事实。所以,在分类中,当某个类别的重要性高于其他类别时,可以使用Precison和Recall多个比分类错误率更好的新指标。
全栈程序员站长
2022/08/27
2.8K0
ROC及AUC计算方法及原理「建议收藏」
什么是ROC曲线?为什么要使用ROC?以及 AUC的计算
真正(True Positive , TP)被模型预测为正的正样本; 假负(False Negative , FN)被模型预测为负的正样本; 假正(False Positive , FP)被模型预测为正的负样本; 真负(True Negative , TN)被模型预测为负的负样本。
种花家的奋斗兔
2020/11/13
70.2K1
什么是ROC曲线?为什么要使用ROC?以及 AUC的计算
模型评估指标AUC和ROC,这是我看到的最透彻的讲解
blog.csdn.net/liweibin1994/article/details/79462554
double
2019/09/18
2.9K0
模型评估指标AUC和ROC,这是我看到的最透彻的讲解
机器学习之分类性能度量指标 : ROC曲线、AUC值、正确率、召回率
同见博客:http://zhwhong.ml/2017/04/14/ROC-AUC-Precision-Recall-analysis/(对Latex公式支持更好) ---- 在分类任务中,人们总是喜欢基于错误率来衡量分类器任务的成功程度。错误率指的是在所有测试样例中错分的样例比例。实际上,这样的度量错误掩盖了样例如何被分错的事实。在机器学习中,有一个普遍适用的称为混淆矩阵(confusion matrix)的工具,它可以帮助人们更好地了解分类中的错误。 比如有这样一个在房子周围可能发现的动物类型的预测,这
zhwhong
2018/05/16
2.7K0
ROC曲线的含义以及画法
ROC的全名叫做Receiver Operating Characteristic(受试者工作特征曲线 ),又称为感受性曲线(sensitivity curve)。得此名的原因在于曲线上各点反映着相同的感受性,它们都是对同一信号刺激的反应,只不过是在几种不同的判定标准下所得的结果而已。其主要分析工具是一个画在二维平面上的曲线——ROC 曲线。ROC曲线以真正例率TPR为纵轴,以假正例率FPR为横轴,在不同的阈值下获得坐标点,并连接各个坐标点,得到ROC曲线。 对于一个分类任务的测试集,其本身有正负两类标签,我们对于这个测试集有一个预测标签,也是正负值。分类器开始对样本进行分类时,首先会计算该样本属于正确类别的概率,进而对样本的类别进行预测。比如说给出一组图片,让分类器判断该图片是否为汉堡,分类器在开始分类前会首先计算该图片为汉堡的概率,进而对该图片的类别进行预测,是汉堡或者不是汉堡。我们用概率来表示横坐标,真实类别表示纵坐标,分类器在测试集上的效果就可以用散点图来表示,如图所示
全栈程序员站长
2022/08/28
1.3K0
ROC曲线的含义以及画法
机器学习-ROC曲线:技术解析与实战应用
机器学习和数据科学在解决复杂问题时,经常需要评估模型的性能。其中,ROC(Receiver Operating Characteristic)曲线是一种非常有用的工具,被广泛应用于分类问题中。该工具不仅在医学检测、信号处理中有着悠久的历史,而且在近年来的机器学习应用中也显得尤为关键。
TechLead
2023/10/21
1.2K0
机器学习-ROC曲线:技术解析与实战应用
机器学习之分类性能度量指标 : ROC曲线、AUC值、正确率、召回率
在分类任务中,人们总是喜欢基于错误率来衡量分类器任务的成功程度。错误率指的是在所有测试样例中错分的样例比例。实际上,这样的度量错误掩盖了样例如何被分错的事实。在机器学习中,有一个普遍适用的称为混淆矩阵
用户1332428
2018/03/09
3.7K0
机器学习之分类性能度量指标 : ROC曲线、AUC值、正确率、召回率
在不平衡数据上使用AUPRC替代ROC-AUC
来源:DeepHub IMBA本文约2000字,建议阅读7分钟尽管 ROC-AUC 包含了许多有用的评估信息,但它并不是一个万能的衡量标准。 ROC曲线和曲线下面积AUC被广泛用于评估二元分类器的性能。但是有时,基于精确召回曲线下面积 (AUPRC) 的测量来评估不平衡数据的分类却更为合适。 本文将详细比较这两种测量方法,并说明在AUPRC数据不平衡的情况下衡量性能时的优势。 预备知识——计算曲线 我假设您熟悉准确率和召回率以及混淆矩阵的元素(TP、FN、FP、TN)这些基本知识。如果你不熟悉可以搜索我们以
数据派THU
2022/06/29
1.4K0
在不平衡数据上使用AUPRC替代ROC-AUC
ROC分析
算法工作中,经常要对模型进行评估,由此衍生出很多指标。比如Accuracy、Precision、Recall、F1-score、AUC等等。准确理解各指标的内涵、使用场景及局限,还挺有挑战。更佳阅读体验,请移步ROC分析。
用户2183996
2019/02/21
1K0
ROC分析
RS Meet DL(75)-考虑CPM的评估方法csAUC
在点击率预估中,AUC是最常用的评估指标,这一指标衡量的是任取一个正例和负例,正例的得分高于负例的概率。那么点击率预估中,正例和负例分别是什么呢?很显然,正例就是用户点击过的item,负例是用户没有点击的item。
石晓文
2020/02/12
1.2K1
精确率、召回率、TPR、ROC...... | 机器学习算法常用指标总结
阅读目录 1. TPR、FPR&TNR 2. 精确率Precision、召回率Recall和F1值 3. 综合评价指标F-measure 4. ROC曲线和AUC 5. 参考内容 考虑一个二分问题,即将实例分成正类(positive)或负类(negative)。对一个二分问题来说,会出现四种情况。如果一个实例是正类并且也被 预测成正类,即为真正类(True positive),如果实例是负类被预测成正类,称之为假正类(False positive)。相应地,如果实例是负类被预测成负类,称之为真负类(True
数说君
2018/04/08
13.4K0
精确率、召回率、TPR、ROC...... | 机器学习算法常用指标总结
Python 深度学习目标检测评价指标
准确率 (Accuracy),混淆矩阵 (Confusion Matrix),精确率(Precision),召回率(Recall),平均正确率(AP),mean Average Precision(mAP),交除并(IoU),ROC + AUC,非极大值抑制(NMS)。
用户9925864
2022/07/27
8640
Python 深度学习目标检测评价指标
ROC曲线/AUC曲线与混淆矩阵介绍
ROC(Receiver Operating Characteristic)曲线即受试者工作特征曲线 (receiver operating characteristic curve,简称ROC曲线),又称为感受性曲线(sensitivity curve),用来评价一个二值分类器(binary classifier)的优劣。
里克贝斯
2021/05/21
1.7K0
ROC曲线/AUC曲线与混淆矩阵介绍
ROC曲线及AUC值[通俗易懂]
参考文献:【ROC曲线与AUC值】,【ROC,AUC最透彻的讲解(实例分析+matlab代码)】,【AUC计算方法与Python实现】,【AUC曲线计算方法及代码实现】
全栈程序员站长
2022/08/29
3.7K0
ROC曲线及AUC值[通俗易懂]
PR曲线、ROC曲线、AUC能干个啥
PR曲线实则是以precision(精准率)和recall(召回率)这两个变量而做出的曲线,其中recall为横坐标,precision为纵坐标。
用户3570225
2024/05/19
1K0
PR曲线、ROC曲线、AUC能干个啥
机器学习模型评估指标
实际应用中,评估指标依具体问题灵活使用,在选择模型和调整参数过程中选择正确的指标十分重要。模型评估目标应以业务目标为导向,选择最合适的评估指标。
aiplus
2021/11/04
2.5K0
你真的了解模型评估与选择嘛
前面几讲我们基于数据分析师需要掌握的基本技能,从SQL出发,学习了统计学的基本知识,在系统层面基本讲完了数据分析师需要具备的能力。下面几讲,我们会围绕数据挖掘工程师需具备的知识体系展开,今天会着重介绍机器学习中模型评估与选择的基础知识。
数据万花筒
2020/12/30
7760
你真的了解模型评估与选择嘛
【机器学习 | 分类指标大全】全面解析分类评估指标:从准确率到AUC,多分类问题也不在话下, 确定不来看看?
🙋‍♂️声明:本人目前大学就读于大二,研究兴趣方向人工智能&硬件(虽然硬件还没开始玩,但一直很感兴趣!希望大佬带带)
计算机魔术师
2023/09/24
1.1K0
机器学习评价指标合辑(Precision/Recall/F1score/P-R曲线/ROC曲线/AUC)
在训练模型时,我们需要使用各种评价指标评估模型的效果。然而,在我初入门时,很多概念都搞不清楚,网上大部分总结或者比较简单,或者杂糅在一起,有点凌乱,甚至可能还有错误,在此抛砖引玉,总结一下各种常用的评价指标,以备使用时查阅,如有错误欢迎指出。
枫桦
2022/08/02
2.3K0
机器学习评价指标合辑(Precision/Recall/F1score/P-R曲线/ROC曲线/AUC)
pr曲线 roc曲线_roc曲线与auc的含义
查准率,表示所有被预测为正类的样本(TP+FP)是真正类(TP)的比例: P = T P T P + F P P= \frac{TP}{TP+FP} P=TP+FPTP​ 查全率,表示所有真正类的样本(TP+FN)中被预测为真正类(TP)的比例: R = T P T P + F N R= \frac{TP}{TP+FN} R=TP+FNTP​
全栈程序员站长
2022/11/01
2.2K0
pr曲线 roc曲线_roc曲线与auc的含义
推荐阅读
相关推荐
ROC及AUC计算方法及原理「建议收藏」
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验