ROC-AUC即求ROC曲线下的面积
输入第一行:样本数N
2——N+1行: 类别,预测值
输出:ROC-AUC值,保留两位小数
思路:
ROC-AUC怎么计算呢。
一句话说明AUC的本质和计算规则:
AUC:一个正例,一个负例,预测为正的概率值比预测为负的概率值还要大的可能性。
所以根据定义:我们最直观的有两种计算AUC的方法
1:绘制ROC曲线,ROC曲线下面的面积就是AUC的值
2:假设总共有(m+n)个样本,其中正样本m个,负样本n个,总共有m*n个样本对,计数,正样本预测为正样本的概率值大于负样本预测为正样本的概率值记为1,累加计数,然后除以(m*n)就是AUC的值
第二种编程是很好实现的。
如下:
N = int(input())
cls1 = []
cls2 = []
for i in range(N):
cls, pred = list(map(float, input().split()))
if int(cls) == 1:
cls1.append(pred)
else:
cls2.append(pred)
if not cls2 or not cls1:
print(0)
if N < 2:
print(0)
num2 = len(cls2)
prob = 0
for item2 in cls2:
count = 0
for item1 in cls1:
if item1 >= item2:
count += 1
prob += count
result = int(prob*100/(len(cls1)*len(cls2)))
result = round(result/100, 2)
print(result)