From 03571b09b674fe039fae9950a3a259ee43b42b06 Mon Sep 17 00:00:00 2001 From: Osma Suominen Date: Tue, 29 Jan 2019 15:28:02 +0200 Subject: [PATCH] Avoid returnin nan values for Precision@K. Fixes #247 --- annif/eval.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/annif/eval.py b/annif/eval.py index ca045a298..da67d6c88 100644 --- a/annif/eval.py +++ b/annif/eval.py @@ -30,12 +30,16 @@ def precision_at_k_score(y_true, y_pred, limit): """calculate the precision at K, i.e. the number of relevant items among the top K predicted ones""" scores = [] + origlimit = limit for true, pred in zip(y_true, y_pred): order = pred.argsort()[::-1] - limit = min(limit, np.count_nonzero(pred)) - order = order[:limit] + orderlimit = min(limit, np.count_nonzero(pred)) + order = order[:orderlimit] gain = true[order] - scores.append(gain.sum() / limit) + if orderlimit > 0: + scores.append(gain.sum() / orderlimit) + else: + scores.append(0.0) return statistics.mean(scores)