import quapy as qp def from_name(err_name): if err_name == 'f1e': return f1e elif err_name == 'f1': return f1 else: return qp.error.from_name(err_name) def f1(prev): # https://github.com/dice-group/gerbil/wiki/Precision,-Recall-and-F1-measure if prev[0] == 0 and prev[1] == 0 and prev[2] == 0: return 1.0 elif prev[0] == 0 and prev[1] > 0 and prev[2] == 0: return 0.0 elif prev[0] == 0 and prev[1] == 0 and prev[2] > 0: return float('NaN') else: recall = prev[0] / (prev[0] + prev[1]) precision = prev[0] / (prev[0] + prev[2]) return 2 * (precision * recall) / (precision + recall) def f1e(prev): return 1 - f1(prev)