如何计算auc论文中的python svm
序
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.在上面的代码中,每个分数都有一个阈值,但实际上,这是相当低效的。您可以对样本进行采样,也可以计算水平轴坐标。