本文首先从整体上介绍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

  1. import numpy as np
  2. from sklearn.metrics import roc_curve
  3.  
  4. y = np.array([1,1,2,2])
  5. pred = np.array([0.1,0.4,0.35,0.8])
  6. fpr, tpr, thresholds = roc_curve(y, pred, pos_label=2)
  7. print(fpr)
  8. print(tpr)
  9. print(thresholds)
  10.  
  11. from sklearn.metrics import auc
  12. 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. datetime

    DateTime字段类型对应的时间格式是 yyyy-MM-dd HH:mm:ss.fff ,3个f,精确到1毫秒(ms),示例 2014-12-03 17:06:15.433 . DateTime2字 ...

  2. ADVDAV驱动

    // ADV7179 register configuration array for PAL mode ADI_DEV_ACCESS_REGISTER ADV7179_Cfg[]={ {ADV717 ...

  3. 树莓派摄像头模块转成H264编码通过RTMP实现Html输出

    官方原帖 http://www.raspberrypi.org/phpBB3/viewtopic.php?f=43&t=45368&sid=b81f6551e478f0f6e172aa ...

  4. Centos Cacti 0.8.8g

    一.Cacti简介1. cacti是用php语言实现的一个软件,它的主要功能是用snmp服务获取数据,然后用rrdtool储存和更新数据,当用户需要查看数据的时候用rrdtool生成图表呈现给用户.因 ...

  5. 在xilinxFPGA上使用microblaze及自写GPIO中断

    很久很久没有更新过博客了,今天来扒一扒FPGA上CPU软核的使用. 主要完成的功能:使用的开发板是nexys 4 DDR,板上有16个switch以及16个LED,需要完成microblaze对led ...

  6. 【leetcode】 Remove Duplicates from Sorted List

    Given a sorted linked list, delete all duplicates such that each element appear only once. For examp ...

  7. python selenium 操作chrome

    1.下载chromedriver.exe 入在chrome 浏览器目录下 from selenium import webdriverimport os chromedriver = "C: ...

  8. web前端开发资源分享:学习计划及资料推荐

    HTML & CSS W3C官网 HTML学习  CSS学习 书籍: <Head First HTML与CSS.XHTML(中文版)><CSS禅意花园(修订版)> 视频 ...

  9. <读书笔记>软件调试之道 :从大局看调试-发现代码存在问题

    声明:本文档的内容主要来源于书籍<软件调试修炼之道>作者Paul Butcher,属于读书笔记.欢迎转载! ---------------------------------------- ...

  10. Ajax请求数据

    后台使用数数组的形式存放数据(以键值对的形式存放).让后再Json转码. Map<String,String> map=new HashMap<String,String>() ...