利用Python画ROC曲线和AUC值计算


Posted in Python onSeptember 19, 2016

前言

ROC(Receiver Operating Characteristic)曲线和AUC常被用来评价一个二值分类器(binary classifier)的优劣。这篇文章将先简单的介绍ROC和AUC,而后用实例演示如何python作出ROC曲线图以及计算AUC。

AUC介绍

AUC(Area Under Curve)是机器学习二分类模型中非常常用的评估指标,相比于F1-Score对项目的不平衡有更大的容忍性,目前常见的机器学习库中(比如scikit-learn)一般也都是集成该指标的计算,但是有时候模型是单独的或者自己编写的,此时想要评估训练模型的好坏就得自己搞一个AUC计算模块,本文在查询资料时发现libsvm-tools有一个非常通俗易懂的auc计算,因此抠出来用作日后之用。

AUC计算

AUC的计算分为下面三个步骤:

    1、计算数据的准备,如果模型训练时只有训练集的话一般使用交叉验证的方式来计算,如果有评估集(evaluate)一般就可以直接计算了,数据的格式一般就是需要预测得分以及其目标类别(注意是目标类别,不是预测得到的类别)

    2、根据阈值划分得到横(X:False Positive Rate)以及纵(Y:True Positive Rate)点

    3、将坐标点连成曲线之后计算其曲线下面积,就是AUC的值

直接上python代码

#! -*- coding=utf-8 -*-
import pylab as pl
from math import log,exp,sqrt


evaluate_result="you file path"
db = [] #[score,nonclk,clk]
pos, neg = 0, 0 
with open(evaluate_result,'r') as fs:
 for line in fs:
 nonclk,clk,score = line.strip().split('\t')
 nonclk = int(nonclk)
 clk = int(clk)
 score = float(score)
 db.append([score,nonclk,clk])
 pos += clk
 neg += nonclk
 
 

db = sorted(db, key=lambda x:x[0], reverse=True)

#计算ROC坐标点
xy_arr = []
tp, fp = 0., 0.  
for i in range(len(db)):
 tp += db[i][2]
 fp += db[i][1]
 xy_arr.append([fp/neg,tp/pos])

#计算曲线下面积
auc = 0.  
prev_x = 0
for x,y in xy_arr:
 if x != prev_x:
 auc += (x - prev_x) * y
 prev_x = x

print "the auc is %s."%auc

x = [_v[0] for _v in xy_arr]
y = [_v[1] for _v in xy_arr]
pl.title("ROC curve of %s (AUC = %.4f)" % ('svm',auc))
pl.xlabel("False Positive Rate")
pl.ylabel("True Positive Rate")
pl.plot(x, y)# use pylab to plot x and y
pl.show()# show the plot on the screen

输入的数据集可以参考svm预测结果

其格式为:

nonclk \t clk \t score

其中:
    1、nonclick:未点击的数据,可以看做负样本的数量

    2、clk:点击的数量,可以看做正样本的数量

    3、score:预测的分数,以该分数为group进行正负样本的预统计可以减少AUC的计算量

运行的结果为:

利用Python画ROC曲线和AUC值计算

如果本机没安装pylab可以直接注释依赖以及画图部分

注意

上面贴的代码:

    1、只能计算二分类的结果(至于二分类的标签随便处理)

    2、上面代码中每个score都做了一次阈值,其实这样效率是相当低的,可以对样本进行采样或者在计算横轴坐标时进行等分计算

总结

以上就是这篇文章的全部内容,希望本文的内容能对大家的学习或者工作带来一定的帮助,如果有疑问大家可以留言交流。

Python 相关文章推荐
Python常用知识点汇总
May 08 Python
python批量添加zabbix Screens的两个脚本分享
Jan 16 Python
python基础教程之Filter使用方法
Jan 17 Python
Python二叉树的定义及常用遍历算法分析
Nov 24 Python
python reduce 函数使用详解
Dec 05 Python
Python操作Sql Server 2008数据库的方法详解
May 17 Python
Python开发最牛逼的IDE——pycharm
Aug 01 Python
python实现集中式的病毒扫描功能详解
Jul 09 Python
基于python3 pyQt5 QtDesignner实现窗口化猜数字游戏功能
Jul 15 Python
opencv3/C++实现视频背景去除建模(BSM)
Dec 11 Python
使用pyinstaller逆向.pyc文件
Dec 20 Python
python GUI库图形界面开发之PyQt5控件数据拖曳Drag与Drop详细使用方法与实例
Feb 27 Python
Python文件与文件夹常见基本操作总结
Sep 19 #Python
Python实现批量更换指定目录下文件扩展名的方法
Sep 19 #Python
Python按行读取文件的实现方法【小文件和大文件读取】
Sep 19 #Python
Python遍历目录并批量更换文件名和目录名的方法
Sep 19 #Python
Python实现更改图片尺寸大小的方法(基于Pillow包)
Sep 19 #Python
Python自定义进程池实例分析【生产者、消费者模型问题】
Sep 19 #Python
python安装PIL模块时Unable to find vcvarsall.bat错误的解决方法
Sep 19 #Python
You might like
一段php加密解密的代码
2006/10/09 PHP
浅谈PHP各环境下的伪静态配置
2019/03/13 PHP
HR vs CL BO3 第二场 2.13
2021/03/10 DOTA
js获取单选按钮的数据
2006/11/27 Javascript
window.location.hash 属性使用说明
2010/03/20 Javascript
如何将JS的变量值传递给ASP变量
2012/12/10 Javascript
jQuery 插件开发指南
2014/11/14 Javascript
jQuery实现行文字链接提示效果的方法
2015/03/10 Javascript
温习Javascript基础语法之词法结构
2016/05/31 Javascript
jQuery ajax MD5实现用户注册即时验证功能
2016/10/11 Javascript
解决同一页面中两个iframe互相调用jquery,js函数的方法
2016/12/12 Javascript
JS实现给json数组动态赋值的方法示例
2020/03/19 Javascript
详解Vue学习笔记入门篇之组件的内容分发(slot)
2017/07/17 Javascript
js中url对象化管理分析
2017/12/29 Javascript
js实现通过开始结束控制的计时器
2019/02/25 Javascript
js获取浏览器地址(获取第1个斜杠后的内容)
2019/09/03 Javascript
p5.js实现简单货车运动动画
2019/10/23 Javascript
[52:41]OG vs IG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/20 DOTA
Python中使用Counter进行字典创建以及key数量统计的方法
2018/07/06 Python
Python3转换html到pdf的不同解决方案
2019/03/11 Python
Django中使用 Closure Table 储存无限分级数据
2019/06/06 Python
python3中sorted函数里cmp参数改变详解
2020/03/12 Python
详解Python之Scrapy爬虫教程NBA球员数据存放到Mysql数据库
2021/01/24 Python
预订旅游活动、景点和旅游:GetYourGuide
2019/09/29 全球购物
C#里面如何倒序排列一个数组的元素?
2013/06/21 面试题
致跳高运动员广播稿
2014/01/13 职场文书
大学生家政服务项目创业计划书
2014/01/30 职场文书
学生干部学习的自我评价
2014/02/18 职场文书
青年文明号创建承诺
2014/03/31 职场文书
创业融资计划书
2014/04/25 职场文书
2014年卫生工作总结
2014/11/27 职场文书
幼儿园小班工作总结2015
2015/04/25 职场文书
最美乡村教师观后感
2015/06/11 职场文书
趣味运动会赞词
2015/07/22 职场文书
centos8安装nginx1.9.1的详细过程
2021/08/02 Servers
Nginx图片服务器配置之后图片访问404的问题解决
2022/03/21 Servers