ROC曲线、AUC、Precision、Recall、F-measure理解及Python实现
本文首先从整体上介绍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实现的更多相关文章
- ROC,AUC,PR,AP介绍及python绘制
这里介绍一下如题所述的四个概念以及相应的使用python绘制曲线: 参考博客:http://kubicode.me/2016/09/19/Machine%20Learning/AUC-Calculat ...
- 分类问题(四)ROC曲线
ROC曲线 ROC曲线是二元分类器中常用的工具,它的全称是 Receiver Operating Characteristic,接收者操作特征曲线.它与precision/recall 曲线特别相似, ...
- 查全率(Recall),查准率(Precision),灵敏性(Sensitivity),特异性(Specificity),F1,PR曲线,ROC,AUC的应用场景
之前介绍了这么多分类模型的性能评价指标(<分类模型的性能评价指标(Classification Model Performance Evaluation Metric)>),那么到底应该选 ...
- 【分类模型评判指标 二】ROC曲线与AUC面积
转自:https://blog.csdn.net/Orange_Spotty_Cat/article/details/80499031 略有改动,仅供个人学习使用 简介 ROC曲线与AUC面积均是用来 ...
- 评估分类器性能的度量,像混淆矩阵、ROC、AUC等
评估分类器性能的度量,像混淆矩阵.ROC.AUC等 内容概要¶ 模型评估的目的及一般评估流程 分类准确率的用处及其限制 混淆矩阵(confusion matrix)是如何表示一个分类器的性能 混淆矩阵 ...
- 【分类问题中模型的性能度量(二)】超强整理,超详细解析,一文彻底搞懂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 ...
- (原+转)ROC曲线
转自:http://baike.baidu.com/link?url=_H9luL0R0BSz8Lz7aY1Q_hew3JF1w-Zj_a51ggHFB_VYQljACH01pSU_VJtSGrGJO ...
- 机器学习常见的几种评价指标:精确率(Precision)、召回率(Recall)、F值(F-measure)、ROC曲线、AUC、准确率(Accuracy)
原文链接:https://blog.csdn.net/weixin_42518879/article/details/83959319 主要内容:机器学习中常见的几种评价指标,它们各自的含义和计算(注 ...
- Mean Average Precision(mAP),Precision,Recall,Accuracy,F1_score,PR曲线、ROC曲线,AUC值,决定系数R^2 的含义与计算
背景 之前在研究Object Detection的时候,只是知道Precision这个指标,但是mAP(mean Average Precision)具体是如何计算的,暂时还不知道.最近做OD的任 ...
随机推荐
- KNN算法——python实现
二.Python实现 对于机器学习而已,Python需要额外安装三件宝,分别是Numpy,scipy和Matplotlib.前两者用于数值计算,后者用于画图.安装很简单,直接到各自的官网下载回来安装即 ...
- oracle 创建用户
/*分为四步 *//*第1步:创建临时表空间 */create temporary tablespace ycjy tempfile 'D:\oracledata\ycjy.dbf' size 50 ...
- Linux Mint安装jdk8
想到研究Java,可能学习openjdk是比较好的方式,于是去找openjdk.对于Debian based系统的安装指南是: -jdk 然而我的Linux Mint 17却无法安装.搜索之后发现如下 ...
- OpenLayers 3 基础知识(一)
OpenLayers 是一个专为Web GIS 客户端开发提供的JavaScript 类库包,用于实现标准格式发布的地图数据访问. 要在你的网页中使用OpenLayers(现用版本:v3.19,1), ...
- android .apk安装时遇到NSTALL_FAILED_CONTAINER_ERROR错误
在一台酷派上装apk时遇到问题: android Installation error: INSTALL_FAILED_CONTAINER_ERROR 遇到问题后baidu google修改为andr ...
- percent的用法
select*from test; 先查询所有的结果一共是8条记录 select top(50) percent *from test; 则只查询该表中百分之50的结果集
- 安装MySQL5.7
安装方式:绿色安装(使用压缩文件) 文件版本:MySQL Community Server 5.7.13(x86 &x64) 大部分过程同<安装MySQL5.5>,本篇只写不同部分 ...
- opendove中的odgw所需要的内核模块
最近组里要做opendove相关的东西,需要odgw的一个kernel-module. 以前安装过,但备份不见了,在此做个链接备忘 : https://git.opendaylight.org/ger ...
- js数组的操作
很早之前整理的一篇文章,感觉比较清晰. 一.数组元素的操作 1.数组的创建 var arrayObj = new Array(); var arrayObj = new Array(size); // ...
- nf_conntrack被启用导致服务故障
1.查看是否有 nf_conntrack 使用iptable -L -t nat 查看,注意!!!查看也会启用nf_conntrack,任何和nat有关的命令都会启用nf_contrack -L 查 ...