python画出roc曲线 auc计算逻辑_Python画ROC曲线和AUC值计算
前言
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的计算量
运行的结果为:
如果本机没安装pylab可以直接注释依赖以及画图部分
注意
上面贴的代码:
1、只能计算二分类的结果(至于二分类的标签随便处理)
2、上面代码中每个score都做了一次阈值,其实这样效率是相当低的,可以对样本进行采样或者在计算横轴坐标时进行等分计算
更多Python画ROC曲线和AUC值计算相关文章请关注PHP中文网!
本文原创发布php中文网,转载请注明出处,感谢您的尊重!
python画出roc曲线 auc计算逻辑_Python画ROC曲线和AUC值计算相关推荐
- python 一张图画多条线_Python画多条线在一个图里
概要: python的matplotlib作图很强大,本文教你用6种不同方式解决将多种数据曲线画到一起. 问题: 今天,老板又要一个数据报表,小明选择用 python来实现."用matplo ...
- python找出矩阵中的最大值_Python例题:找到并输出矩阵中的最大值
早就听说Python是一门很强大的语言,不过一直没有什么机会去学.直到前一段时间我的技术群里有人问我了一道Python的题目,本着帮助他人.充实自己的想法,我二话不说就去查找资料,做出了这道题.也算是 ...
- python制作会动的表情包_python画微信表情符的实例代码
#@project = facepalm #@file = main #@author = Maoliang Ran #@create_time = 2018/8/28 22:57 import tu ...
- python画半圆的指令是什么_python画圆的方式是什么
python画圆的方式是什么 发布时间:2020-09-03 11:04:03 来源:亿速云 阅读:72 作者:小新 python画圆的方式是什么?这个问题可能是我们日常学习或工作经常见到的.希望通过 ...
- python给出数据点进行插值_Python对数据进行插值和下采样的方法
使用Python进行插值非常方便,可以直接使用scipy中的interpolate import numpy as np x1 = np.linspace(1, 4096, 1024) x_new = ...
- python找出矩阵中的最大值_Python / Scipy:找到矩阵的“有界”最小值/最大值
我认为指出我的问题最简单,一般情况很难解释. 说我有一个矩阵 a with dimensions NxMxT, 人们可以将T视为时间维度(使问题更容易).设(n,m)为通过NxM的指数.我可以调用(n ...
- 用python打印出一个人的照片_python爬取图片实例 - 一个人看日出,一个人看夕阳,一个人走路,一个人欢笑 - OSCHINA - 中文开源技术交流社区...
小李飞刀图片:http://www.verycd.com/entries/507389/images/view/778356 # -*- coding: utf-8 -*- import reques ...
- python找出10000以内的质数_python求10000以内的质数_10000以内的质数
展开全部 [ P1- P10] 2 3 5 7 11 13 17 19 23 29 [ P11- P20] 31 37 41 43 47 53 59 61 67 71 [ P21- P30] 73 7 ...
- python科赫曲线的代码_python – 实现Koch曲线?
我正在查看Koch Snowflake(here)的维基百科页面,并且被徽标/乌龟风格的所有示例所困扰.所以我开始自己制作返回列表或坐标. 我的实现是在python中,我基本上扯掉了python tu ...
最新文章
- [雪峰磁针石博客]kotlin书籍汇总
- Python 中的用户自定义类型
- 系统架构设计师与系统分析师历年实体分析与解答下载_医疗知识图谱问答系统探究(一)...
- 如何迁移开源 Flink 任务到实时计算Flink版?实战手册来帮忙!
- Bug in Code CodeForces - 420C (计数,图论)
- BZOJ2843:极地旅行社
- 配置和使用OCS 2007会议功能
- Mysql——Innodb和Myisam概念与数据恢复
- C语言复习---获取矩阵的对角和
- 2020公务员考试应届毕业生的身份界定
- mongovue mysql_mongoVUE的增删改查操作使用说明(转)
- 如何禁用电脑文件共享
- 辽宁师范大学计算机科学与技术在哪个校区,2021年辽宁师范大学有几个校区,大一新生在哪个校区...
- 数组 保存学生的成绩
- css立体3d效果动画,css3 实现动画,变换基点及3D效果~
- 【Verilog语法1】加载存储器$readmemh和$readmemb函数的使用
- Kafka动态认证SASL/SCRAM配置+整合springboot配置
- 朴素贝叶斯--过滤垃圾邮件实例
- fMRI学习笔记:预处理及数据分析(使用spm12)
- linux 查看 x64 x86 arm64 以及它们的区别