如何计算auc论文中的python svm

用Python绘制ROC曲线并计算AUC值

Roc(受试者操作特征)曲线和AUC通常用于评估二元分类器。本文将简单介绍ROC和AUC,然后举例演示python如何绘制ROC曲线和计算AUC。

AUC简介

AUC(曲线下面积)是机器学习的两类模型中非常常用的评价指标。相比于F1-Score,AUC对项目的不平衡更宽容。目前常见的机器学习库(如scikit-learn)一般都集成了这个指标的计算,但有时模型是独立的或者自己写的。这个时候,如果你想评价训练模型的好坏,你就得自己搭建一个auc计算模块。本文发现libsvm-tools在查询信息时具有非常易于理解的AUC计算,因此将其挑选出来供将来使用。

AUC计算

AUC的计算分为以下三个步骤:

1,计算数据的准备,如果模型训练中只有一个训练集,一般采用交叉验证的方式计算。如果有评估集,可以直接计算。数据格式一般是预测分数及其目标类别(注意是目标类别,不是预测类别)。

2.根据阈值得出横向(X:假阳性率)和纵向(Y:真阳性率)点。

3.将坐标点连成曲线后,计算曲线下的面积,就是AUC的值。

直接进入python代码

#!-*-编码=utf-8 -*-

将pylab作为pl导入

从数学导入日志,exp,sqrt

evaluate_result= "您的文件路径"

db = [] #[score,nonclk,clk]

正,负= 0,0

用open(evaluate_result,' r ')作为fs:

对于fs中的行:

nonclk,clk,score = line.strip()。拆分(' \t ')

nonclk = int(nonclk)

clk = int(clk)

分数=浮点(分数)

db.append([score,nonclk,clk])

pos += clk

负+=非时钟

db = sorted(db,key=lambda x:x[0],reverse=True)

#计算ROC坐标点

xy_arr = []

tp,fp = 0。, 0.

对于范围内的I(len(db)):

tp += db[i][2]

fp += db[i][1]

xy_arr.append([fp/neg,tp/pos])

#计算曲线下的面积

auc = 0。

prev_x = 0

对于xy_arr中的x,y:

如果x!= prev_x:

auc += (x - prev_x) * y

prev_x = x

打印“auc为% s”。% AUC

x = [_v[0] for _v in xy_arr]

y = [_v[1] for _v in xy_arr]

pl . title(" % s的ROC曲线(AUC = %.4f)" % ('svm ',AUC))

pl.xlabel("假阳性率")

pl.ylabel(“真实阳性率”)

pl.plot(x,y)#使用pylab绘制x和y

pl.show()#在屏幕上显示绘图

输入数据集可以参考svm预测结果。

它的格式是:

非时钟\t时钟\t分数

其中包括:

1,nonclick:未点击的数据可视为负样本数。

2.clk:点击次数,可视为正样本数。

3.得分:预测得分,可作为该组阳性和阴性样本的预统计,以减少AUC的计算。

操作的结果是:

如果这台机器上没有安装pylab,可以直接标注依赖关系和绘图部分。

注意

上面发布的代码:

1,只能计算二元分类的结果(至于二元分类的标签,可以随便处理)。

2.在上面的代码中,每个分数都有一个阈值,但实际上,这是相当低效的。您可以对样本进行采样,也可以计算水平轴坐标。