使用sklearn中roc曲线计算AUC值

原创 2018年04月16日 00:06:26

ROC曲线指受试者工作特征曲线/接收器操作特性(receiver operating characteristic,ROC)曲线,是反映灵敏性和特效性连续变量的综合指标,是用构图法揭示敏感性和特异性的相互关系,它通过将连续变量设定出多个不同的临界值,从而计算出一系列敏感性和特异性。ROC曲线是根据一系列不同的二分类方式(分界值或决定阈),以真正例率(也就是灵敏度)(True Positive Rate,TPR)为纵坐标,假正例率(1-特效性)(False Positive Rate,FPR)为横坐标绘制的曲线。

ROC观察模型正确地识别正例的比例与模型错误地把负例数据识别成正例的比例之间的权衡。TPR的增加以FPR的增加为代价。ROC曲线下的面积是模型准确率的度量,AUC(Area under roccurve)。

纵坐标:真正率(True Positive Rate , TPR)或灵敏度(sensitivity)
TPR = TP /(TP + FN) (正样本预测结果数 / 正样本实际数)
横坐标:假正率(False Positive Rate , FPR)
FPR = FP /(FP + TN) (被预测为正的负样本结果数 /负样本实际数)

形式:
sklearn.metrics.roc_curve(y_true,y_score, pos_label=None, sample_weight=None, drop_intermediate=True)
该函数返回这三个变量:fpr,tpr,和阈值thresholds;

这里理解thresholds:
分类器的一个重要功能“概率输出”,即表示分类器认为某个样本具有多大的概率属于正样本(或负样本)。

“Score”表示每个测试样本属于正样本的概率。
接下来,我们从高到低,依次将“Score”值作为阈值threshold,当测试样本属于正样本的概率大于或等于这个threshold时,我们认为它为正样本,否则为负样本。每次选取一个不同的threshold,我们就可以得到一组FPR和TPR,即ROC曲线上的一点。当我们将threshold设置为1和0时,分别可以得到ROC曲线上的(0,0)和(1,1)两个点。将这些(FPR,TPR)对连接起来,就得到了ROC曲线。当threshold取值越多,ROC曲线越平滑。其实,我们并不一定要得到每个测试样本是正样本的概率值,只要得到这个分类器对该测试样本的“评分值”即可(评分值并不一定在(0,1)区间)。评分越高,表示分类器越肯定地认为这个测试样本是正样本,而且同时使用各个评分值作为threshold。我认为将评分值转化为概率更易于理解一些。
示例:

from sklearn import metrics
from sklearn.metrics import auc 
import numpy as np
y = np.array([1, 1, 2, 2])  
scores = np.array([0.1, 0.4, 0.35, 0.8])  
fpr, tpr, thresholds = metrics.roc_curve(y, scores, pos_label=2)
fpr
array([ 0. ,  0.5,  0.5,  1. ])
tpr
array([ 0.5,  0.5,  1. ,  1. ])
thresholds
array([ 0.8 ,  0.4 ,  0.35,  0.1 ])
metrics.auc(fpr, tpr) 
0.75
计算AUC值,其中x,y分别为数组形式,根据(xi,yi)在坐标上的点,生成的曲线,然后计算AUC值;

直接通过roc_auc_score方法根据真实值(必须是二值)、预测值(可以是0/1,也可以是proba值)计算出auc值,中间过程的roc计算省略。

形式:
sklearn.metrics.roc_auc_score(y_true, y_score, average='macro', sample_weight=None)
average : string, [None, ‘micro’, ‘macro’(default), ‘samples’, ‘weighted’]
from sklearn.metrics import roc_auc_score
y_true = np.array([0, 0, 1, 1])
y_scores = np.array([0.1, 0.4, 0.35, 0.8])  
roc_auc_score(y_true, y_scores)
0.75

关于fpr,tpr及混淆矩阵请查看另一篇博文:https://blog.csdn.net/htbeker/article/details/79861946

挣值管理理论与实践

作为项目经理,在项目管理过程中,经常会被问到这些问题:我们的项目现在是否符合进度要求?是否符合预算?现在项目进度偏差是多少?项目预算的偏差是多少?出现偏差的原因是什么?是谁的责任?项目发展的趋势是什么样的?本课程将带来解答这些问题的方法。
  • 2017年09月19日 14:28

详解ROC/AUC计算过程

ROC和AUC的详细计算过程
  • ybdesire
  • ybdesire
  • 2016-07-22 22:55:12
  • 11874

python sklearn画ROC曲线

preface:最近《生物信息学》多次谈到AUC,ROC这两个指标,正在做的project,要求画ROC曲线,sklearn里面有相应的函数,故学习学习。 AUC: ROC: 具体使用参考sklear...
  • u010454729
  • u010454729
  • 2015-04-17 16:11:04
  • 24649

基于sklearn 的auc 计算方法

from sklearn import cross_validation,metrics from sklearn import svmtrain_data,train_target = load(f...
  • u010414589
  • u010414589
  • 2016-04-16 10:56:00
  • 8011

ROC和AUC在python中metrics上的实现

ROC(Receiver Operating Characteristic)曲线和AUC常被用来评价一个二值分类器(binary classifier)的优劣,对两者的简单介绍见[这里](http:/...
  • u010159842
  • u010159842
  • 2016-10-25 17:25:24
  • 8071

用sklearn绘制ROC曲线

用sklearn绘制ROC曲线
  • HelloWorld_Xia
  • HelloWorld_Xia
  • 2016-08-05 21:01:21
  • 3018

使用R进行分类时,ROC的绘制和AUC的计算

在之前的这篇日志中,我简单介绍了使用R进行Logistic Regression时,Recall,Precision,TPR,FPR等等的计算,但是如果依照这种方法绘制ROC曲线(关于ROC和AU...
  • qysh123
  • qysh123
  • 2015-02-23 11:49:01
  • 4865

机器学习扫盲---常见学习效果指标说明(并附基于sklearn库计算AUC)

导语就我们在使用机器学习对数据库进行训练的时候会用到很多指标对这种方法的结果进行评估,本文就学习一些常见的评估方法吧。指标说明嗯嗯现在我们开始说一般有哪些指标(其实通常是在医学的研究中),我们选取了一...
  • qq5q13638
  • qq5q13638
  • 2017-10-28 21:54:08
  • 626

ROC曲线和AUC面积计算 matlab

在网上看到的程序,粘贴在自己的博客中,以备以后用后用到了好查找: function [auc, curve] = ROC(score, target, Lp, Ln) % This function...
  • Crystal_Cai
  • Crystal_Cai
  • 2014-12-03 11:17:08
  • 3984

ROC理解与AUC计算

说到ROC曲线,我们首先想到的是下面这四个值 TP     (真正)     实际正FP     (假正)     实际负TN     (真负)     实际负FN     (假负)     实...
  • yuhangzhai
  • yuhangzhai
  • 2016-10-21 19:16:21
  • 1671
收藏助手
不良信息举报
您举报文章:使用sklearn中roc曲线计算AUC值
举报原因:
原因补充:

(最多只允许输入30个字)