auc计算公式python,python auc 置信区间
面积下曲线是机器学习常用的二分类评测手段,直接含义是皇家对空观察队曲线下的面积。本文总结了计算机编程语言语言实现计算罗马纪元的三种方式,感兴趣的可以学习一下
目录
介绍实现代码方法补充
介绍
AUC(曲线下面积)被定义为皇家对空观察队曲线下与坐标轴围成的面积,显然这个面积的数值不会大于1。又由于皇家对空观察队曲线一般都处于y=x这条直线的上方,所以罗马纪元的取值范围在0.5和一之间罗马纪元越接近1.0,检测方法真实性越高;等于0.5时,则真实性最低,无应用价值。
皇家对空观察队曲线下的面积计算方式:参考计算机编程语言实现计算罗马纪元的示例代码
实现代码
将数组作为铭牌导入
从sklearn.metrics导入roc_auc_score
y_true=[1,1,0,0,1,1,0]
y_pred=[0.8,0.7,0.5,0.5,0.5,0.5,0.3]
print(roc_auc_score(y_true,y_pred))
# 下面实现的是方法一
# https://blog.csdn.net/lieyingkub99/article/details/81266664?UTM _ medium=分销。PC _相关。none-task-blog-title-1 SPM=1001。2101 .3001 .4242
def cal_auc1(y_true,y_pred):
n _ bins=10
postive_len=sum(y_true) # M正样本个数
negative _ len=len(y _ true)-postive _ len # N负样本个数
total _ case=postive _ len * negative _ len # M * N样本对数
pos _ histogram=[0 for _ in range(n _ bin)]#保存每一个概率值下的正样本个数
neg _ histogram=[0 for _ in range(n _ bin)]#保存每一个概率值下的负样本个数
bin _宽度=1.0/n _ bin
对于范围内的我(len(y _ true)):
nth _ bin=int(y _ pred[I]/bin _ width)#概率值转化为整数下标
if y_true[i]==1:
位置直方图[n _ bin]=1
else:
负直方图[n _ bin]=1
打印(位置直方图)
打印(负直方图)
累计负=0
satisfied_pair=0
对于范围(新斌):中的我
satisfied _ pair=(pos _ histogram[I]* accumulated _ neg pos _ histogram[I]* neg _ histogram[I]* 0.5
print(位置直方图[i],负直方图[i],累积负直方图,卫星对)
累计_负数=负数_直方图[我]
返回满意对/浮点(总计案例)
print(cal_auc1(y_true,y_pred))
# 下面实现的是方法2
# https://blog.csdn.net/lieyingkub99/article/details/81266664?UTM _ medium=分销。PC _相关。none-task-blog-title-1 SPM=1001。2101 .3001 .4242
def cal_auc2(y_true,y_pred):
n _ bins=10
postive_len=sum(y_true) # M正样本个数
negative _ len=len(y _ true)-postive _ len # N负样本个数
total _ case=postive _ len * negative _ len # M * N样本对数
问题
_rank = [0 for _ in range(n_bins)] # 保存每一个概率值的rank
prob_num = [0 for _ in range(n_bins)] # 保存每一个概率值出现的次数
bin_width = 1.0 / n_bins
raw_arr = []
for i in range(len(y_true)):
raw_arr.append([y_pred[i], y_true[i]])
arr = sorted(raw_arr, key=lambda d: d[0]) # 按概率由低到高排序
for i in range(len(arr)):
nth_bin = int(arr[i][0] / bin_width) # 概率值转化为整数下标
prob_rank[nth_bin] = prob_rank[nth_bin] + i + 1
prob_num[nth_bin] = prob_num[nth_bin] + 1
satisfied_pair = 0
for i in range(len(arr)):
if arr[i][1] == 1:
nth_bin = int(arr[i][0] / bin_width) # 概率值转化为整数下标
satisfied_pair = satisfied_pair + prob_rank[nth_bin] / prob_num[nth_bin]
return (satisfied_pair - postive_len * (postive_len + 1) / 2 ) / total_case
print(cal_auc2(y_true, y_pred))
# 根据roc曲线,找不同点算下面积, 需要点足够多
def cal_auc3(y_true, y_pred):
"""Summary
Args:
raw_arr (TYPE): Description
Returns:
TYPE: Description
"""
raw_arr = []
for i in range(len(y_true)):
raw_arr.append([y_pred[i], y_true[i]])
print(raw_arr)
arr = sorted(raw_arr, key=lambda d:d[0], reverse=True)
pos, neg = 0., 0.
for record in arr:
if record[1] == 1.:
pos += 1
else:
neg += 1
fp, tp = 0., 0.
xy_arr = []
for record in arr:
if record[1] == 1.:
tp += 1
else:
fp += 1
xy_arr.append([fp/neg, tp/pos])
print(xy_arr)
auc = 0.
prev_x = 0.
prev_y = 0.
for x, y in xy_arr:
if x != prev_x:
auc += ((x - prev_x) * (y + prev_y) / 2.)
prev_x = x
prev_y = y
print(auc)
import numpy as np
from sklearn.metrics import roc_auc_score
y_true = [1, 1, 0, 0, 1, 1, 0]
y_pred = [0.8, 0.7, 0.5, 0.5, 0.5, 0.5, 0.3]
print(roc_auc_score(y_true, y_pred))
方法补充
下面是小编为大家找到的另外三个计算AUC的代码,会输出三种方法各自的auc,以及通过面积计算AUC时的ROC曲线。
在通过面积计算AUC的方法中,没有遍历数据的预测概率作为分类阈值,而是对[0,1]区间等分得到一系列阈值。
# AUC的计算
运行结果
到此这篇关于Python实现计算AUC的三种方式总结的文章就介绍到这了,更多相关Python计算AUC内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。