aucpython(auc论文里的怎么计算pythonsvm)

1.auc 论文里的 怎么计算 python svm

利用Python画ROC曲线,以及值的计算\ 前言 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都做了一次阈值,其实这样效率是相当低的,可以对样本进行采样或者在计算横轴坐标时进行等分计算。

2.python tensorflow 怎么添加auc

tensorflow添加自定义的auc计算operator tensorflow可以很方便的添加用户自定义的operator(如果不添加也可以采用sklearn的auc计算函数或者自己写一个 但是会在python执行,这里希望在graph中也就是c++端执行这个计算) 这里根据工作需要添加一个计算auc的operator,只给出最简单实现,后续高级功能还是参考官方wiki 注意tensorflow现在和最初的官方wiki有变化,原wiki貌似是需要重新bazel编译整个tensorflow,然后使用比如tf.user_op.auc这样。

目前wiki给出的方式>=0.6.0版本,采用plug-in的方式,更加灵活可以直接用g++编译一个so载入,解耦合,省去了编译tensorflow过程,即插即用。首先auc的operator计算的文件 tensorflow/core/user_ops/auc.cc/* Copyright 2015 Google Inc. All Rights Reserved.Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.You may obtain a copy of the License at Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the License for the specific language governing permissions and limitations under the License.==============================================================================*/// An auc Op.#include "tensorflow/core/framework/op.h"#include "tensorflow/core/framework/op_kernel.h" using namespace tensorflow; using std::vector;//@TODO add weight as optional input REGISTER_OP("Auc").Input("predicts: T1").Input("labels: T2").Output("z: float").Attr("T1: {float, double}").Attr("T2: {float, double}")//.Attr("T1: {float, double}")//.Attr("T2: {int32, int64}").SetIsCommutative().Doc(R"doc( Given preidicts and labels output it's auc)doc"); class AucOp : public OpKernel { public:explicit AucOp(OpKernelConstruction* context) : OpKernel(context) {} template void index_sort(const ValueVec& valueVec, vector& indexVec) { indexVec.resize(valueVec.size()); for (size_t i = 0; i < indexVec.size(); i++) { indexVec[i] = i; } std::sort(indexVec.begin(), indexVec.end(),[&valueVec](const int l, const int r) { return valueVec(l) > valueVec(r); }); } void Compute(OpKernelContext* context) override {// Grab the input tensor const Tensor& predicts_tensor = context->input(0); const Tensor& labels_tensor = context->input(1); auto predicts = predicts_tensor.flat(); //输入能接受float double那么这里如何都处理?auto labels = labels_tensor.flat(); vector indexes; index_sort(predicts, indexes); typedef float Float; Float oldFalsePos = 0; Float oldTruePos = 0; Float falsePos = 0; Float truePos = 0; Float oldOut = std::numeric_limits::infinity(); Float result = 0; for (size_t i = 0; i < indexes.size(); i++) { int index = indexes[i]; Float label = labels(index); Float prediction = predicts(index); Float weight = 1.0;//Pval3(label, output, weight); if (prediction != oldOut) //存在相同值得情况是特殊处理的 { result += 0.5 * (oldTruePos + truePos) * (falsePos - oldFalsePos); oldOut = prediction; oldFalsePos = falsePos; oldTruePos = truePos; } if (label > 0) truePos += weight; else falsePos += weight; } result += 0.5 * (oldTruePos + truePos) * (falsePos - oldFalsePos); Float AUC = result / (truePos * falsePos);// Create an output tensor Tensor* output_tensor = NULL; TensorShape output_shape; OP_REQUIRES_OK(context, context->allocate_output(0, output_shape, &output_tensor)); output_tensor->scalar()() = AUC; } }; REGISTER_KERNEL_BUILDER(Name("Auc").Device(DEVICE_CPU), AucOp); 编译:$cat gen-so.sh TF_INC=$(python -c 'import tensorflow as tf; print(tf.sysconfig.get_include())') TF_LIB=$(python -c 'import tensorflow as tf; print(tf.sysconfig.get_lib())') i=$1 o=${i/.cc/.so} g++ -std=c++11 -shared $i -o $o -I $TF_INC -l tensorflow_framework -L $TF_LIB -fPIC -Wl,-rpath $TF_LIB$sh gen-so.sh auc.cc 会生成auc.so 使用的时候 auc_module = tf.load_op_library('auc.so')#auc = tf.user_ops.auc #0.6.0之前的tensorflow 自定义op方式 auc = auc_module.auc evaluate_op = auc(py_x, Y) #py_x is predicts, Y is labels。

3.python中的pass代表什么意思呢

pass就是什么也不做,只是为了防止语法错误。

知识扩展:

1、Python是一种面向对象、直译式计算机程序设计语言,由荷兰人Guido van Rossum发明于1989年,1991年发行第一个公开发行版。

2、它常被昵称为胶水语言,它能够很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松地联结在一起。

3、Python是纯粹的自由软件, 源代码和解释器CPython遵循 GPL协议。语法简洁清晰,特色之一是强制用空白符作为语句缩进。

4、名字来源于一个喜剧,最初设计Python这种语言的人并没有想到Python会在工业和科研上获得如此广泛的使用。

Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。自从20世纪90年代初Python语言诞生至今,它逐渐被广泛应用于处理系统管理任务和Web编程。Python已经成为最受欢迎的程序设计语言之一。2011年1月,它被TIOBE编程语言排行榜评为2010年度语言。自从2004年以后,python的使用率是呈线性增长。

4.anaconda怎么运行python

我现在就在用anaconda!

1.首先,你安装了anaconda,安装完成以后可以再开始菜单里找到anaconda,里面有如下图项目:

1. 第三个"anaconda prompt"就是类似于cmd的窗口:

3.你在桌面新建一个.py文件,例如"hello.py",里面码上如下代码:

print("hello world!")保存!

4.在"anaconda prompt"中cd到桌面(注:你可以再桌面的任意文件属性中查找桌面的路径):

5.输入:python hello.py

6.界面如下:

----------------------------------分割线----------------------------------

或者你打开图1的最后一个项目,spyder,它是python的集成开发环境(ide),在里面就可以很方便的编辑和运行python程序了.

我现在就在用spyder,推荐你用:

完!

5.在python中prob是什么意思

我没有理解错的话,你应该说的是numpy.prod()这个函数吧,这个函数是连乘操作,将里面所有的元素相乘。

比如:a = numpy.array([1,2,3,4])

那么:numpy.prod(a) = 24

还有:numpy.prod(a[2:3]) = 3#所有的区间都是左闭右开的,所以只有3了

同理:numpy.prod(a[1:3]) = 6。

有这三个例子,就应该可以对这个函数有个大概的理解了。

aucpython

转载请注明出处代码入门网 » aucpython(auc论文里的怎么计算pythonsvm)

资讯

python三元运算符if(python没有三元运算符吗)

阅读(27)

本文主要为您介绍python三元运算符if,内容包括python没有三元运算符吗,什么时候三元运算符python,如何用Python的if条件运算符去求三个值中最大的值,并返回最大值的。Python没有三目运算符(?:),但也有类似的替代方案,那就是true_part if conditio

资讯

pythonautocad(python开发cad)

阅读(22)

本文主要为您介绍pythonautocad,内容包括python开发cad,autocad支持python吗,Python下使用pywin32通过AutoCADApplication的ActiveX。Python(KK 英语发音:/ˈpaɪθən/,是一种面向对象、直译式计算机程序设计语言,由Guido van Rossum于1989

资讯

sicpmitpython(如何将atom打造成python开发环境)

阅读(18)

本文主要为您介绍sicpmitpython,内容包括如何将atom打造成python开发环境,sqltilepython怎么打开,廖雪峰python课程怎么样。今天拿到邀请试用了一会儿,可以明确的说跟 Sublime 没有关系。Sublime 是原生界面,脚本用的是 python;Atom 应该

资讯

pythonnumpy方差(如何用python计算方差,平均值)

阅读(22)

本文主要为您介绍pythonnumpy方差,内容包括如何用python计算方差,平均值,pythonnumpy的样本标准差怎么写,python怎么做均值方差归一化。python计算均值方差用Python求均值与方差,可以自己写,也可以借助于numpy,不过到底哪个快一点呢?我做了个实

资讯

python调用java函数(python怎么调用java程序)

阅读(19)

本文主要为您介绍python调用java函数,内容包括python怎么调用java程序,有没有从Python调用Java的好方法,如何在Python中调用C++代码或Java包中的函数。把java封装成restful接口,然后python通过远程调用数据。使用Pyjnius这个python库。#源代

资讯

pythonintellij(intellijidea怎么编写python程序打包发送到spark)

阅读(24)

本文主要为您介绍pythonintellij,内容包括如何使用intellijidea编写python,intellij可以跑python吗,如何使用idea开发python。,客户端和虚拟集群中hadoop、spark、scala的安装目录是一致的,这样开发的spark应用程序的时候不需要打包spark开发

资讯

pythongui界面(python图形化界面设计tkinter)

阅读(19)

本文主要为您介绍pythongui界面,内容包括python图形化界面设计tkinter,python编写gui界面,pythongui图形界面。python提供了多个图形开发界面的库,几个常用Python GUI库如下:Tkinter: Tkinter模块("Tk 接口")是Py

资讯

pythonmultiply(Python实现输出1*2*3*4*5)

阅读(23)

本文主要为您介绍pythonmultiply,内容包括python中的multiply函数怎么用,numpy中multiply函数怎么用,Python实现输出1*2*3*4*5100的和。究竟是和还是积呢?如果是积的话,我们设计的代码如下,有注释multi_num = 1 # 乘法结果初始化for i in rang

资讯

python日志统计(python有没有通用的日志统计系统)

阅读(15)

本文主要为您介绍python日志统计,内容包括python有没有通用的日志统计系统,如何用python,每隔5分钟对实时日志做统计处理,如何用python分析网站日志。logging模块import logging# 配置日志,输出到控制台logging.basicConfig(level=loggin