本文首先从整体上介绍ROC曲线、AUC、Precision、Recall以及F-measure,然后介绍上述这些评价指标的有趣特性,最后给出ROC曲线的一个Python实现示例。

一、ROC曲线、AUC、Precision、Recall以及F-measure

二分类问题的预测结果可能正确,也可能不正确。结果正确存在两种可能:原本对的预测为对,原本错的预测为错;结果错误也存在两种可能:原本对的预测为错,原本错的预测为对,如Fig 1左侧所示。其中Positives代表预测是对的,Negatives代表预测是错的,True代表原本为对,False代表原本为错。如何评价两个二分类模型的好坏呢?二分类模型的理想状态是什么呢?

首先回答第二个问题,理想的二分类模型能将原本是对的预测为对,原本是错的预测为错。一般情况下,我们很难收集到完备的“原本是对的,原本是错的”数据集,也就是说,通常情况下我们获得是完备的“原本是对的,原本是错的”数据集的一个子集。因此,评价二分类模型的优劣就是在该子集上进行的。我们希望在该子集上对二分类模型的评价是无偏的,也就是说,在概率上保证在该子集上对二分类模型的评价与在完备集上的评价一致。

针对第一个问题,其实很简单,数数就行了。数数原本是对的预测为对的个数,原本是错的预测为错的个数,原本是对的预测为错的比例,原本是错的预测为对的比例(评价二分类问题的四个基本元素,后续评价指标都是在此基础上做出的)。评价一个模型的好坏用四个参数是不是有点不太直观哦,要是只有一个评价指标,如果一个模型的这指标比别的模型大,那这个模型就比别的模型好(或者反过来,一个模型的这指标比别的模型小,那这个模型比别的模型好),该多好哦!哈哈!

precision的含义是:预测为对的当中,原本为对的比例(越大越好,1为理想状态)

recall的含义是:原本为对的当中,预测为对的比例(越大越好,1为理想状态)

F-measure的含义是:用precision和recall两个指标不直观(任性),索性把他们合并为一个,这就是F-measure(越大越好,1为理想状态,此时precision为1,recall为1)

accuracy的含义是:预测对的(包括原本是对预测为对,原本是错的预测为错两种情形)占整个的比例(越大越好,1为理想状态)

fp rate的含义是:原本是错的预测为对的比例(越小越好,0为理想状态)

tp rate的含义是:原本是对的预测为对的比例(越大越好,1为理想状态)

ROC曲线的含义是:得到算法的一组(fp rate, tp rate)然后做出的曲线(没办法用大小来衡量,不开心,因此有了AUC),如Fig 2所示

AUC的含义:ROC曲线下的面积(越大越好,1为理想状态)

Fig 2 ROC曲线示意图

二、上述评价评价指标的有趣特性

1) 实际中应用测试数据集可能存在以下三种情况之一:原本是对的与原本是错的比例一致,原本是对的所占比例较小,原本是对的所占比例较大。在上述三种情况下,由于(fp         rate, tp rate)基本保持不变,因此ROC曲线、AUC在一定程度上具备对数据集正负样本比例的不变性。

2) 如果单纯蒙的话会是什么结果呢(假设原本是对的预测为对的比例,原本是错的预测为错的比例,原本是对的预测为错的比例,原本是错的预测为对的比例都为0.5,其实也就        是蒙的直接结果了)?此时,precision、recall以及综合两者的F-measure值不能作为判断模型好坏的标准(因为原本是错的数量不确定,考虑原本是对的数据只有1,原本是      错的数据有10000这种极端情况根据他们的定义即可得知precision近似为0,正负样本比例一致则precision约为0.5),也就是说上述三个指标受数据集正负样本比例影响。

3) (fp rate, tp rate)是如何获得呢?对于一个数据集应该只有一组(fp rate, tp rate)吧!这里面涉及到一个问题,就是二分类模型的输出通常是输入为对的概率,如果我      们认为概率大于T的为对,那么如果T不同则(fp rate, tp rate)不同,因此我们获得了一组(fp rate, tp rate)。

三、ROC曲线的Python实现实例

读者可根据http://scikit-learn.org/stable/install.html提示方法安装scikit-learn

import numpy as np
from sklearn.metrics import roc_curve y = np.array([1,1,2,2])
pred = np.array([0.1,0.4,0.35,0.8])
fpr, tpr, thresholds = roc_curve(y, pred, pos_label=2)
print(fpr)
print(tpr)
print(thresholds) from sklearn.metrics import auc
print(auc(fpr, tpr))

上述代码可以得到ROC曲线数据对(fp rate,tp rate)(因为thresholds取不同值的缘故),AUC

总结:由二分类问题的四个基本元素出发,得出ROC曲线、AUC、Precision、Recall以及F-measure的定义及特性,最后给出Python的一个简单实现。

ROC曲线、AUC、Precision、Recall、F-measure理解及Python实现的更多相关文章

  1. ROC,AUC,PR,AP介绍及python绘制

    这里介绍一下如题所述的四个概念以及相应的使用python绘制曲线: 参考博客:http://kubicode.me/2016/09/19/Machine%20Learning/AUC-Calculat ...

  2. 分类问题(四)ROC曲线

    ROC曲线 ROC曲线是二元分类器中常用的工具,它的全称是 Receiver Operating Characteristic,接收者操作特征曲线.它与precision/recall 曲线特别相似, ...

  3. 查全率(Recall),查准率(Precision),灵敏性(Sensitivity),特异性(Specificity),F1,PR曲线,ROC,AUC的应用场景

    之前介绍了这么多分类模型的性能评价指标(<分类模型的性能评价指标(Classification Model Performance Evaluation Metric)>),那么到底应该选 ...

  4. 【分类模型评判指标 二】ROC曲线与AUC面积

    转自:https://blog.csdn.net/Orange_Spotty_Cat/article/details/80499031 略有改动,仅供个人学习使用 简介 ROC曲线与AUC面积均是用来 ...

  5. 评估分类器性能的度量,像混淆矩阵、ROC、AUC等

    评估分类器性能的度量,像混淆矩阵.ROC.AUC等 内容概要¶ 模型评估的目的及一般评估流程 分类准确率的用处及其限制 混淆矩阵(confusion matrix)是如何表示一个分类器的性能 混淆矩阵 ...

  6. 【分类问题中模型的性能度量(二)】超强整理,超详细解析,一文彻底搞懂ROC、AUC

    文章目录 1.背景 2.ROC曲线 2.1 ROC名称溯源(选看) 2.2 ROC曲线的绘制 3.AUC(Area Under ROC Curve) 3.1 AUC来历 3.2 AUC几何意义 3.3 ...

  7. (原+转)ROC曲线

    转自:http://baike.baidu.com/link?url=_H9luL0R0BSz8Lz7aY1Q_hew3JF1w-Zj_a51ggHFB_VYQljACH01pSU_VJtSGrGJO ...

  8. 机器学习常见的几种评价指标:精确率(Precision)、召回率(Recall)、F值(F-measure)、ROC曲线、AUC、准确率(Accuracy)

    原文链接:https://blog.csdn.net/weixin_42518879/article/details/83959319 主要内容:机器学习中常见的几种评价指标,它们各自的含义和计算(注 ...

  9. Mean Average Precision(mAP),Precision,Recall,Accuracy,F1_score,PR曲线、ROC曲线,AUC值,决定系数R^2 的含义与计算

    背景   之前在研究Object Detection的时候,只是知道Precision这个指标,但是mAP(mean Average Precision)具体是如何计算的,暂时还不知道.最近做OD的任 ...

随机推荐

  1. EA使用

    类逻辑图 关系1:泛化(继承),Driver和Northeastermer继承了Person类 关系2:实现,Northeastermer实现了LivingLeiFeng类 关系3:  关联,两个对象 ...

  2. arc下dealloc得处理

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...

  3. 黑马程序员_ Objective-c 内存管理笔记

    引用计数器 当一个对象被创建出来,就要分配给内存这个对象,当不用这个对象的时候,就要及时的回收,为了可以明确知道对象有没有被使用,就要用引用计数器来体现,只要计数器不为0,表明对象被使用中. 1.方法 ...

  4. Git学习笔记(一)

    1.git clone https://github.com/miguelgrinberg/flasky.git cd flasky git checkout 1a 2.git reset --har ...

  5. EF文章连接

    http://www.cnblogs.com/shanyou/archive/2011/07/17/2108953.html http://www.cnblogs.com/haogj/archive/ ...

  6. sqlldr

    1.字符集 sqlldr可以指定读取的文件的字符集,如果数据库为gbk,读取的文件为utf-8,这个时候就需要指定字符集 load data CHARACTERSET 'UTF8' 2.sqlldr导 ...

  7. 艺术品照片融合到背景墙上效果及DEMO

    演示地址: 功能:图片按照角度增加阴影,比较复杂的功能就是当墙面是不规则的时候,贴的艺术品必须按照墙面的角度进行变形处理.

  8. vs签入签出--TFS进行源代码管理

    工作项是项目管理的基本元素.工作项说明了要做什么事(例如任务),出了什么问题(例如Bug),除此之外,我们还需要将程序一行一行地写出来,TFS的源代码管理控制系统,就能帮助我们管理这一行行的代码,一个 ...

  9. C# 时间函数相减

    1:第一种方式: "; "; DateTime firstDateTemp = DateTime.ParseExact(firsttime, "yyyyMMddHHmms ...

  10. svn本地客户端和eclipse插件对应不上解决

    如果你是SVN来管理代码,如果你是用eclipse搞开发,如果你知道eclipse有SVN的插件,那么你一定想用它来直接管理你的代码.但是事情往往非人所愿.当我们用SVN客户端把代码更新到本地,并导入 ...