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的一个简单实现。

时间: 2024-10-11 07:08:17

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

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

之前介绍了这么多分类模型的性能评价指标(<分类模型的性能评价指标(Classification Model Performance Evaluation Metric)>),那么到底应该选择哪些指标来评估自己的模型呢?答案是应根据应用场景进行选择. 查全率(Recall):recall是相对真实的情况而言的:假设测试集里面有100个正类,如果模型预测出其中40个是正类,那模型的recall就是40%.查全率也称为召回率,等价于灵敏性(Sensitivity)和真正率(True Positive

ROC曲线学习

ROC曲线:全称 Receiver Operating Characteristic曲线,即受试者工作特性曲线,在机器学习领域常用于判断分类器的好坏. 要了解ROC曲线,首先要了解该曲线的横纵坐标 —— FPR(1-特异度)和TPR(召回率或者灵敏度). 1. 基本概念 —— 混淆矩阵 绘制混淆矩阵:https://www.cnblogs.com/qi-yuan-008/p/11675499.html 2. ROC曲线的横坐标是FPR值,纵坐标是TPR值:每指定一个threshold,就对应一个

ROC,AUC,Precision,Recall,F1的介绍与计算(转)

1. 基本概念 1.1 ROC与AUC ROC曲线和AUC常被用来评价一个二值分类器(binary classifier)的优劣,ROC曲线称为受试者工作特征曲线 (receiver operating characteristic curve,简称ROC曲线),又称为感受性曲线(sensitivity curve),AUC(Area Under Curve)是ROC曲线下的面积.在计算ROC曲线之前,首先要了解一些基本概念.在二元分类模型的预测结果有四种,以判断人是否有病为例: 真阳性(TP)

评估指标:ROC,AUC,Precision、Recall、F1-score

一.ROC,AUC ROC(Receiver Operating Characteristic)曲线和AUC常被用来评价一个二值分类器(binary classifier)的优劣 . ROC曲线一般的横轴是FPR,纵轴是FPR.AUC为曲线下面的面积,作为评估指标,AUC值越大,说明模型越好.如下图: 二.Precision.Recall.F1-score Terminology and derivationsfrom a confusion matrix true positive (TP)

Precision/Recall和ROC曲线与分类

[混淆矩阵与Precision/Recall和ROC曲线的关系] Precision/Recall和ROC曲线的基本介绍可以看我的另一篇博客: http://blog.csdn.net/adminabcd/article/details/46475361 接下来我们引入混淆矩阵: 当我们对样本进行分类时,会分成正例样本(记为1)和负例样本(记为0),根据分类结果与原始分类,可以计算出相应的混淆矩阵.那么则有: Precision(pre)=true positive rate=tp/(tp+fp

机器学习算法中的评价指标(准确率、召回率、F值、ROC、AUC等)

参考链接:https://www.cnblogs.com/Zhi-Z/p/8728168.html 具体更详细的可以查阅周志华的西瓜书第二章,写的非常详细~ 一.机器学习性能评估指标 1.准确率(Accurary) 准确率是我们最常见的评价指标,而且很容易理解,就是被分对的样本数除以所有的样本数,通常来说,正确率越高,分类器越好. 准确率确实是一个很好很直观的评价指标,但是有时候准确率高并不能代表一个算法就好.比如某个地区某天地震的预测,假设我们有一堆的特征作为地震分类的属性,类别只有两个:0:

ROC曲线与AUC值

本文根据以下文章整理而成,链接: (1)http://blog.csdn.net/ice110956/article/details/20288239 (2)http://blog.csdn.net/chjjunking/article/details/5933105 1.概述 AUC(Area Under roc Curve)是一种用来度量分类模型好坏的一个标准.这样的标准其实有很多,例如:大约10年前在machine learning文献中一统天下的标准:分类精度:在信息检索(IR)领域中常

混淆矩阵、准确率、精确率/查准率、召回率/查全率、F1值、ROC曲线的AUC值

准确率.精确率(查准率).召回率(查全率).F1值.ROC曲线的AUC值,都可以作为评价一个机器学习模型好坏的指标(evaluation metrics),而这些评价指标直接或间接都与混淆矩阵有关,前四者可以从混淆矩阵中直接计算得到,AUC值则要通过ROC曲线进行计算,而ROC曲线的横纵坐标又和混淆矩阵联系密切,所以在了解这些评价指标之前,先知道什么是混淆矩阵很有必要,也方便记忆. 1.混淆矩阵 对于一个二分类问题,我们可以得到如表 1所示的的混淆矩阵(confusion matrix): 表

ROC曲线,AUC面积

1. 什么是ROC曲线? ROC曲线是Receiver operating characteristic curve的简称,中文名为“受试者工作特征曲线”.ROC曲线源于军事领域,横坐标为假阳性率(False positive rate,FPR),纵坐标为真阳性率(True positive rate,TPR). 假阳性率 FPR = FP/N ---N个负样本中被判断为正样本的个数占真实的负样本的个数  真阳性率 TPR = TP/P ---P个正样本中被预测为正样本的个数占真实的正样本的个数