|
import numpy as np
|
|
from scipy.integrate import simps
|
|
|
|
|
|
class FR_AUC:
|
|
def __init__(self, data_definition):
|
|
self.data_definition = data_definition
|
|
if data_definition == '300W':
|
|
self.thresh = 0.05
|
|
else:
|
|
self.thresh = 0.1
|
|
|
|
def __repr__(self):
|
|
return "FR_AUC()"
|
|
|
|
def test(self, nmes, thres=None, step=0.0001):
|
|
if thres is None:
|
|
thres = self.thresh
|
|
|
|
num_data = len(nmes)
|
|
xs = np.arange(0, thres + step, step)
|
|
ys = np.array([np.count_nonzero(nmes <= x) for x in xs]) / float(num_data)
|
|
fr = 1.0 - ys[-1]
|
|
auc = simps(ys, x=xs) / thres
|
|
return [round(fr, 4), round(auc, 6)]
|
|
|