利用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函数帮助查询小工具
Mar 13 Python
Python基础之函数用法实例详解
Sep 10 Python
python通过colorama模块在控制台输出彩色文字的方法
Mar 19 Python
Python Property属性的2种用法
Jun 21 Python
Python解析json文件相关知识学习
Mar 01 Python
使用Python+Splinter自动刷新抢12306火车票
Jan 03 Python
python实现AES加密与解密
Mar 28 Python
Python3.0 实现决策树算法的流程
Aug 08 Python
python实现ftp文件传输功能
Mar 20 Python
Django 允许局域网中的机器访问你的主机操作
May 13 Python
Python进阶学习之带你探寻Python类的鼻祖-元类
May 08 Python
Python中使用Opencv开发停车位计数器功能
Apr 04 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 URL编码解码函数代码
2009/03/10 PHP
基于PHP magic_quotes_gpc的使用方法详解
2013/06/24 PHP
PHP清除数组中所有字符串两端空格的方法
2014/10/20 PHP
php 判断字符串编码是utf-8 或gb2312实例
2016/11/01 PHP
把jQuery的类、插件封装成seajs的模块的方法
2014/03/12 Javascript
基于jQuery的判断iPad、iPhone、Android是横屏还是竖屏的代码
2014/05/11 Javascript
jQuery实现跨域iframe接口方法调用
2015/03/14 Javascript
JS数组排序技巧汇总(冒泡、sort、快速、希尔等排序)
2015/11/24 Javascript
jQuery自动完成插件completer附源码下载
2016/01/04 Javascript
js获取页面及个元素高度、宽度的代码
2016/04/26 Javascript
JavaScript SHA-256加密算法详细代码
2016/10/06 Javascript
canvas基础绘制-绚丽倒计时的实例
2017/09/17 Javascript
vue中v-model的应用及使用详解
2018/06/27 Javascript
vue2.0 下拉框默认标题设置方法
2018/08/22 Javascript
vue.config.js常用配置详解
2019/11/14 Javascript
JavaScript中交换值的10种方法总结
2020/08/18 Javascript
详细介绍Python函数中的默认参数
2015/03/30 Python
浅述python中深浅拷贝原理
2018/09/18 Python
对Python 窗体(tkinter)文本编辑器(Text)详解
2018/10/11 Python
django开发post接口简单案例,获取参数值的方法
2018/12/11 Python
PyCharm下载和安装详细步骤
2019/12/17 Python
python如何获得list或numpy数组中最大元素对应的索引
2020/11/16 Python
html5 实现客户端验证上传文件的大小(简单实例)
2016/05/15 HTML / CSS
伦敦高级内衣品牌:Agent Provocateur(大内密探)
2016/08/23 全球购物
西班牙灯具网上商店:Lampara.es
2018/06/05 全球购物
一个J2EE项目团队的主要人员组成是什么
2012/06/04 面试题
小学教研工作制度
2014/01/15 职场文书
咖啡店自主创业商业计划书
2014/01/22 职场文书
幼儿园教学管理制度
2014/02/04 职场文书
信息技术培训感言
2014/03/06 职场文书
工作保证书范文
2014/04/29 职场文书
驾驶员安全责任书范本
2014/07/24 职场文书
大学生党员自我剖析材料
2014/10/06 职场文书
党员三严三实对照检查材料
2014/10/13 职场文书
寻衅滋事罪辩护词
2015/05/21 职场文书
Python基础之Socket通信原理
2021/04/22 Python