import numpy as np
from sklearn.metrics import roc_auc_score
y_pred=np.array([ 0.14554659, 0.03533667, 0.29994351, 0.48392016, 0.5657261 ,0.65832479, 0.69833894, 0.7236181 , 0.84575142, 0.94085442])
y_true=np.array([ 1., 1., 0., 0., 1., 0., 1., 0., 1., 1.])
def auc(y_true,y_pred):
ptas = np.stack([binary_PTA(y_true,y_pred,k) for k in np.linspace(0, 1, 100)],axis=0)
pfas = np.stack([binary_PFA(y_true,y_pred,k) for k in np.linspace(0, 1, 100)],axis=0)
pfas = np.concatenate([np.ones((1,)) ,pfas],axis=0)
binSizes = -(pfas[1:]-pfas[:-1])
s = ptas*binSizes
return np.sum(s, axis=0)
def binary_PFA(y_true, y_pred, threshold=0.5):
p=np.copy(y_pred)
p[p<threshold]=0
p[p>=threshold]=1
N = np.sum(1 - y_true)
FP = np.sum(p - p * y_true)
return FP/N
def binary_PTA(y_true, y_pred, threshold=0.5):
p=np.copy(y_pred)
p[p<threshold]=0
p[p>=threshold]=1
P = np.sum(y_true)
TP = np.sum(p * y_true)
return TP/P
print('auc=',auc(y_true,y_pred))
print('auc=',roc_auc_score(y_true,y_pred))