In [1]:
import numpy as np
In [2]:
def selectThreshold(pval, yval):
EPSILON = 0
F1 = 0
f1 = 0
step = ((pval.max() - pval.min()) / 1000).astype(float)
for epsilon in np.arange(pval.min(), pval.max(), step):
P = pval < epsilon
tp = np.sum(np.logical_and(P == 1, yval == 1)).astype(float)
fp = np.sum(np.logical_and(P == 1, yval == 0)).astype(float)
fn = np.sum(np.logical_and(P == 0, yval == 1)).astype(float)
prec = ( tp / (tp + fp) ).astype(float)
rec = ( tp / (tp + fn) ).astype(float)
f1 = (2 * prec * rec) / (prec + rec)
if f1 > F1:
F1 = f1
EPSILON = epsilon
return EPSILON, F1