ROC 准确率,召回率 F-measure理解(转载)
本文首先从整体上介绍ROC曲线、AUC、Precision、Recall以及F-measure,然后介绍上述这些评价指标的有趣特性,最后给出ROC曲线的一个Python实现示例。
一、ROC曲线、AUC、Precision、Recall以及F-measure
二分类问题的预测结果可能正确,也可能不正确。结果正确存在两种可能:原本对的预测为对(True Positive 真正),原本错的预测为错(True Negative 真负);结果错误也存在两种可能:原本是错类预测为正类数(False Positive 假正 误报),原本是正类预测为错类数(False Negative 假负 漏报),如Fig 1左侧所示。其中Y代表预测为正类,N代表预测错类,p代表原本为对,n代表原本为错。如何评价两个二分类模型的好坏呢?二分类模型的理想状态是什么呢?
首先回答第二个问题,理想的二分类模型能将原本是对的预测为对,原本是错的预测为错。一般情况下,我们很难收集到完备的“原本是对的,原本是错的”数据集,也就是说,通常情况下我们获得是完备的“原本是对的,原本是错的”数据集的一个子集。因此,评价二分类模型的优劣就是在该子集上进行的。我们希望在该子集上对二分类模型的评价是无偏的,也就是说,在概率上保证在该子集上对二分类模型的评价与在完备集上的评价一致。
针对第一个问题,其实很简单,数数就行了。数数原本是对的预测为对的个数,原本是错的预测为错的个数,原本是对的预测为错的比例,原本是错的预测为对的比例(评价二分类问题的四个基本元素,后续评价指标都是在此基础上做出的)。评价一个模型的好坏用四个参数是不是有点不太直观哦,要是只有一个评价指标,如果一个模型的这指标比别的模型大,那这个模型就比别的模型好(或者反过来,一个模型的这指标比别的模型小,那这个模型比别的模型好),该多好哦!哈哈!

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 准确率,召回率 F-measure理解(转载)的更多相关文章
- 准确率,召回率,F值,ROC,AUC
度量表 1.准确率 (presion) p=TPTP+FP 理解为你预测对的正例数占你预测正例总量的比率,假设实际有90个正例,10个负例,你预测80(75+,5-)个正例,20(15+,5-)个负例 ...
- 分类器评估方法:精确度-召回率-F度量(precision-recall-F_measures)
注:本文是人工智能研究网的学习笔记 Precision和Recall都能够从下面的TP,TN,FP,FN里面计算出来. 几个缩写的含义: 缩写 含义 P condition positive N co ...
- 信息检索(IR)的评价指标介绍 - 准确率、召回率、F1、mAP、ROC、AUC
原文地址:http://blog.csdn.net/pkueecser/article/details/8229166 在信息检索.分类体系中,有一系列的指标,搞清楚这些指标对于评价检索和分类性能非常 ...
- 准确率P 召回率R
Evaluation metricsa binary classifier accuracy,specificity,sensitivety.(整个分类器的准确性,正确率,错误率)表示分类正确:Tru ...
- 准确率(Accuracy), 精确率(Precision), 召回率(Recall)和F1-Measure
yu Code 15 Comments 机器学习(ML),自然语言处理(NLP),信息检索(IR)等领域,评估(Evaluation)是一个必要的 工作,而其评价指标往往有如下几点:准确率(Accu ...
- 机器学习 F1-Score 精确率 - P 准确率 -Acc 召回率 - R
准确率 召回率 精确率 : 准确率->accuracy, 精确率->precision. 召回率-> recall. 三者很像,但是并不同,简单来说三者的目的对象并不相同. 大多时候 ...
- 准确率、精确率、召回率、F1
在搭建一个AI模型或者是机器学习模型的时候怎么去评估模型,比如我们前期讲的利用朴素贝叶斯算法做的垃圾邮件分类算法,我们如何取评估它.我们需要一套完整的评估方法对我们的模型进行正确的评估,如果模型效果比 ...
- fashion_mnist 计算准确率、召回率、F1值
本文发布于 2020-12-27,很可能已经过时 fashion_mnist 计算准确率.召回率.F1值 1.定义 首先需要明确几个概念: 假设某次预测结果统计为下图: 那么各个指标的计算方法为: A ...
- 一文让你彻底理解准确率,精准率,召回率,真正率,假正率,ROC/AUC
参考资料:https://zhuanlan.zhihu.com/p/46714763 ROC/AUC作为机器学习的评估指标非常重要,也是面试中经常出现的问题(80%都会问到).其实,理解它并不是非常难 ...
- 机器学习算法中的评价指标(准确率、召回率、F值、ROC、AUC等)
参考链接:https://www.cnblogs.com/Zhi-Z/p/8728168.html 具体更详细的可以查阅周志华的西瓜书第二章,写的非常详细~ 一.机器学习性能评估指标 1.准确率(Ac ...
随机推荐
- Android App引导页这些坑你自己犯过吗?
场景:測试机:华为荣耀6x 今天我自己掉入一个非常蠢蠢的坑,一个引导页搞了20多分钟.无论我怎么測试用真机还是模拟器都无法执行,可是我写的demo全然没问题,好无语,我都怀疑我是不是搞android, ...
- PHP微信墙制作
微信墙 PHP 注意:由于微信官网不定时会更新,其中模拟登陆以及爬取数据的方式可能会失效,最近这12个月里,就有两次更新导致此功能需要重写. 服务端源码->github地址传送门 思路 其实实现 ...
- 删除Kafka中topic
步骤: 1.编辑Kafka启动时加载的配置文件server.properties,添加一行:delete.topic.enable=true 2.重启Zookeeper和Kafka 3.执行: ./b ...
- HTML5 Canvas 绘制库存变化折线 计算出库存周转率
<!DOCTYPE html> <html lang="utf-8"> <meta http-equiv="Content-Type&quo ...
- Js中数组的追加
Concat arrayObject.concat(arrayX,arrayX,......,arrayX) 常用于 加载更多 ,数组的追加.
- Linux Ubuntu 开机自动启动项设置方法 例:svn服务
在init.d目录建立一个脚本文件svnd.sh # cd /etc/init.d # vim svnd.sh 输入svnd.sh内容如下(/kaifa/svn 为svn仓库目录): #!/bin/b ...
- android 开机自启动的几种方法,监听不到RECEIVE_BOOT_COMPLETED的处理办法
第一种: 监控RECEIVE_BOOT_COMPLETED,即开机启动事件 另外一种: 监控sd卡mount事件 开机总会扫描sd卡吧? 监控sd卡事件也有类似开机启动效果.特别app安装在sd卡 ...
- EXTJS4自学手册——组合图像
Ext.create('Ext.panel.Panel', { title: '组合图像', renderTo: 'ComplexDiagram', items: [{ xtype: 'button' ...
- 通过ngxtop实时监控webserver的访问情况 / 解决ImportError: No module named _sqlite3问题
通过ngxtop实时监控webserver的访问情况 2014-04-03 0个评论 来源:通过ngxtop实时监控web server的访问情况 收藏 我要投稿 关于对ng ...
- css解决方案之css布局
固定宽度布局解决方案 固定宽度的居中布局 首先我们这里探讨的是我们常用的固定宽度的居中布局,这应该是目前实战中应用的最多的了. 然后从考虑是否应用大背景上我们分为两种,一种是允许整体有一个大背景,一种 ...