From bd4e2a314d67a125fcc7eba63116dccd719f1653 Mon Sep 17 00:00:00 2001 From: Andre Anjos <andre.dos.anjos@gmail.com> Date: Wed, 22 Jul 2020 15:11:49 +0200 Subject: [PATCH] [utils.measure] Return tuple instead of list for base measures; Formalize special by-zero division --- bob/ip/binseg/utils/measure.py | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/bob/ip/binseg/utils/measure.py b/bob/ip/binseg/utils/measure.py index 3871f695..84eb811c 100644 --- a/bob/ip/binseg/utils/measure.py +++ b/bob/ip/binseg/utils/measure.py @@ -28,6 +28,12 @@ class SmoothedValue: return d.mean().item() +def tricky_division(n, d): + """Divides n by d. Returns 0.0 in case of a division by zero""" + + return n/(d+(d==0)) + + def base_measures(tp, fp, tn, fn): """Calculates measures from true/false positive and negative counts @@ -105,16 +111,14 @@ def base_measures(tp, fp, tn, fn): """ - tp = float(tp) - tn = float(tn) - precision = tp / (tp + fp + ((tp + fp) == 0)) - recall = tp / (tp + fn + ((tp + fn) == 0)) - specificity = tn / (fp + tn + ((fp + tn) == 0)) - accuracy = (tp + tn) / (tp + fp + fn + tn) - jaccard = tp / (tp + fp + fn + ((tp + fp + fn) == 0)) - f1_score = (2.0 * tp) / (2.0 * tp + fp + fn + ((2.0 * tp + fp + fn) == 0)) - # f1_score = (2.0 * precision * recall) / (precision + recall) - return [precision, recall, specificity, accuracy, jaccard, f1_score] + return ( + tricky_division(tp, tp + fp), #precision + tricky_division(tp, tp + fn), #recall + tricky_division(tn, fp + tn), #specificity + tricky_division(tp + tn, tp + fp + fn + tn), #accuracy + tricky_division(tp, tp + fp + fn), #jaccard index + tricky_division(2*tp, (2*tp) + fp + fn), #f1-score + ) def auc(x, y): -- GitLab