Python画ROC曲线和AUC值计算(附代码)-Python教程

资源魔 33 0

媒介

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的较量争论分为上面三个步骤:

一、较量争论数据的预备,假如模子训练时只有训练集的话普通应用穿插验证的形式来较量争论,假如有评价集(evaluate)普通就能够间接较量争论了,数据的格局普通就是需求预测患上分和其指标种别(留意是指标种别,没有是预测失去的种别)
二、依据阈值划分失去横(X:False Positive Rate)和纵(Y:True Positive Rate)点
三、将坐标点连成曲线之后较量争论其曲线上面积,就是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 = 0for 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

其格局为:

nonclk \t clk \t score

此中:
一、nonclick:未点击的数据,能够看作负样本的数目
二、clk:点击的数目,能够看作正样本的数目
三、score:预测的分数,以该分数为group进行正负样本的预统计能够缩小AUC的较量争论量
运转的后果为:

fae428ceeb4826755c71569c58f117b.png

假如本机没装置pylab能够间接正文依赖和绘图局部
留意
下面贴的代码:
一、只能较量争论二分类的后果(至于二分类的标签随意解决)
二、下面代码中每一个score都做了一次阈值,其实这样效率是相称低的,能够对样本进行采样或许正在较量争论横轴坐标时进行平分较量争论
十分感激你的浏览
年夜学的时分抉择了自学python,工作了发现吃了较量争论机根底欠好的亏,学历没有行这是没方法的事,只能先天补偿,于是正在编码以外开启了本人的逆袭之路,一直的学习python外围常识,深化的研习较量争论机根底常识,整顿好了,我放正在咱们的微信大众号《顺序员学府》,假如你也没有甘平凡,那就与我一同正在编码以外,一直生长吧!

其实这里不只有技巧,更有那些技巧以外的货色,比方,若何做一个粗劣的顺序员,而没有是“屌丝”,顺序员自身就是尊贵的一种存正在啊,莫非没有是吗?[点击退出]想做你本人想成为崇高人,加油!

感激各人的浏览,心愿各人收益多多。

本文转自:https://blog.csdn.net/adrrry/article/details/106796288

保举教程:《python教程》

以上就是Python画ROC曲线以及AUC值较量争论(附代码)的具体内容,更多请存眷资源魔其它相干文章!

标签: python教程 python编程 python使用问题 python,roc曲线

抱歉,评论功能暂时关闭!