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)]