利用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显示进度条的方法
Sep 20 Python
Python实现从订阅源下载图片的方法
Mar 11 Python
Python调用C语言开发的共享库方法实例
Mar 18 Python
基于Django的ModelForm组件(详解)
Dec 07 Python
python tornado微信开发入门代码
Aug 24 Python
pandas计数 value_counts()的使用
Jun 24 Python
python异常触发及自定义异常类解析
Aug 06 Python
Python中字典与恒等运算符的用法分析
Aug 22 Python
python修改文件内容的3种方法详解
Nov 15 Python
基于python实现雪花算法过程详解
Nov 16 Python
python中urllib.request和requests的使用及区别详解
May 05 Python
Python基本知识点总结
Apr 07 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变量引用的面试题
2010/08/08 PHP
php中通过curl模拟登陆discuz论坛的实现代码
2012/02/16 PHP
日常整理PHP中简单的图形处理(经典)
2015/10/26 PHP
php 常用的系统函数
2017/02/07 PHP
PHP使用pdo实现事务处理操作示例
2018/09/05 PHP
JS 精确统计网站访问量的实例代码
2013/07/05 Javascript
PHP abstract与interface之间的区别
2013/11/11 Javascript
js 日期比较相关天数代码
2014/04/02 Javascript
我的Node.js学习之路(一)
2014/07/06 Javascript
点击表单提交时出现jQuery没有权限的解决方法
2014/07/23 Javascript
NodeJS制作爬虫全过程
2014/12/22 NodeJs
jQuery中hover方法和toggle方法使用指南
2015/02/27 Javascript
jquery easyUI中ajax异步校验用户名
2016/08/19 Javascript
Angular使用 ng-img-max 调整浏览器中的图片的示例代码
2017/08/17 Javascript
React-intl 实现多语言的示例代码
2017/11/03 Javascript
Vue使用json-server进行后端数据模拟功能
2018/04/17 Javascript
JS实现滑动导航效果
2020/01/14 Javascript
[01:02:26]DOTA2-DPC中国联赛 正赛 SAG vs RNG BO3 第二场 1月18日
2021/03/11 DOTA
python输出当前目录下index.html文件路径的方法
2015/04/28 Python
对python中array.sum(axis=?)的用法介绍
2018/06/28 Python
python实现一个函数版的名片管理系统过程解析
2019/08/27 Python
解决pycharm最左侧Tool Buttons显示不全的问题
2019/12/17 Python
pytorch nn.Conv2d()中的padding以及输出大小方式
2020/01/10 Python
pytorch 实现在一个优化器中设置多个网络参数的例子
2020/02/20 Python
Python环境配置实现pip加速过程解析
2020/11/27 Python
利用CSS3把图片变成灰色模式的实例代码
2016/09/06 HTML / CSS
详解canvas drawImage()方法绘制图片不显示的问题
2018/10/08 HTML / CSS
LG西班牙网上商店:Tienda LG Online Es
2019/07/30 全球购物
合作意向书模板
2014/03/31 职场文书
大学生工作自荐书
2014/06/16 职场文书
学校安全管理责任书
2014/07/23 职场文书
大学生就业推荐表自我评价
2015/03/02 职场文书
个人思想政治总结
2015/03/05 职场文书
行政经理岗位职责
2015/04/15 职场文书
倡议书怎么写?
2019/04/11 职场文书
浅谈Python列表嵌套字典转化的问题
2021/04/07 Python