利用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设置windows桌面壁纸的实现代码
Jan 28 Python
一个小示例告诉你Python语言的优雅之处
Jul 04 Python
Python的Tornado框架实现异步非阻塞访问数据库的示例
Jun 30 Python
python虚拟环境virtualenv的使用教程
Oct 20 Python
python 读取DICOM头文件的实例
May 07 Python
Python2与Python3的区别实例总结
Apr 17 Python
python利用Opencv实现人脸识别功能
Apr 25 Python
详解Python time库的使用
Oct 10 Python
Pytorch环境搭建与基本语法
Jun 03 Python
python用分数表示矩阵的方法实例
Jan 11 Python
PyCharm 光标变成黑块的解决方式
Feb 06 Python
python tkinter模块的简单使用
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
Thinkphp 框架扩展之应用模式实现方法分析
2020/04/27 PHP
javascript编程起步(第七课)
2007/02/27 Javascript
JQuery textlimit 显示用户输入的字符数 限制用户输入的字符数
2009/05/14 Javascript
解决IE下select标签innerHTML插入option的BUG(兼容IE,FF,Opera,Chrome,Safari)
2010/05/13 Javascript
一些常用弹出窗口/拖放/异步文件上传等实用代码
2013/01/06 Javascript
JavaScript的递归之递归与循环示例介绍
2013/08/05 Javascript
jQuery中delegate与on的用法与区别示例介绍
2013/12/20 Javascript
JavaScript中输出标签的方法
2014/08/27 Javascript
HTML5+setCutomValidity()函数验证表单实例分享
2015/04/24 Javascript
jQuery实现div横向拖拽排序的简单实例
2016/07/13 Javascript
Highcharts学习之坐标轴
2016/08/02 Javascript
javascript显示系统当前时间代码
2016/12/29 Javascript
简化vuex的状态管理方案的方法
2018/06/02 Javascript
Angular2之二级路由详解
2018/08/31 Javascript
小程序从手动埋点到自动埋点的实现方法
2019/01/24 Javascript
Vue模板语法中数据绑定的实例代码
2019/05/17 Javascript
node.js实现上传文件功能
2019/07/15 Javascript
微信小程序下拉加载和上拉刷新两种实现方法详解
2019/09/05 Javascript
详解微信小程序中var、let、const用法与区别
2020/01/11 Javascript
[01:38]DOTA2第二届亚洲邀请赛中国区预选赛出线战队晋级之路
2017/01/17 DOTA
[57:41]Secret vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[58:23]LGD vs TNC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python算法之栈(stack)的实现
2014/08/18 Python
在Linux系统上部署Apache+Python+Django+MySQL环境
2015/12/24 Python
Django 反向生成url实例详解
2019/07/30 Python
python使用配置文件过程详解
2019/12/28 Python
使用python绘制cdf的多种实现方法
2020/02/25 Python
Python下载的11种姿势(小结)
2020/11/18 Python
Orvis官网:自1856年以来,优质服装、飞钓装备等
2018/12/17 全球购物
党员自我批评与反省材料
2014/02/10 职场文书
应聘教师自荐书
2014/06/16 职场文书
《中国梦我的梦》小学生演讲稿
2014/08/20 职场文书
党建工作整改措施
2014/10/28 职场文书
团队执行力培训心得体会
2015/08/15 职场文书
导游词之张家界
2019/10/31 职场文书
图文详解matlab原始处理图像几何变换
2021/07/09 Python