Skip to content

Commit

Permalink
5. inference
Browse files Browse the repository at this point in the history
  • Loading branch information
zzachw committed Oct 7, 2023
1 parent da31ed3 commit b29b10a
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 0 deletions.
1 change: 1 addition & 0 deletions pyhealth/metrics/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@
from .multiclass import multiclass_metrics_fn
from .multilabel import multilabel_metrics_fn
from .fairness import fairness_metrics_fn
from .ranking import ranking_metrics_fn
38 changes: 38 additions & 0 deletions pyhealth/metrics/ranking.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
from typing import List, Dict


def ranking_metrics_fn(qrels: Dict[str, Dict[str, int]],
results: Dict[str, Dict[str, float]],
k_values: List[int]) -> Dict[str, float]:
import pytrec_eval
ret = {}

for k in k_values:
ret[f"NDCG@{k}"] = 0.0
ret[f"MAP@{k}"] = 0.0
ret[f"Recall@{k}"] = 0.0
ret[f"P@{k}"] = 0.0

map_string = "map_cut." + ",".join([str(k) for k in k_values])
ndcg_string = "ndcg_cut." + ",".join([str(k) for k in k_values])
recall_string = "recall." + ",".join([str(k) for k in k_values])
precision_string = "P." + ",".join([str(k) for k in k_values])
evaluator = pytrec_eval.RelevanceEvaluator(qrels,
{map_string, ndcg_string, recall_string,
precision_string})
scores = evaluator.evaluate(results)

for query_id in scores.keys():
for k in k_values:
ret[f"NDCG@{k}"] += scores[query_id]["ndcg_cut_" + str(k)]
ret[f"MAP@{k}"] += scores[query_id]["map_cut_" + str(k)]
ret[f"Recall@{k}"] += scores[query_id]["recall_" + str(k)]
ret[f"P@{k}"] += scores[query_id]["P_" + str(k)]

for k in k_values:
ret[f"NDCG@{k}"] = round(ret[f"NDCG@{k}"] / len(scores), 5)
ret[f"MAP@{k}"] = round(ret[f"MAP@{k}"] / len(scores), 5)
ret[f"Recall@{k}"] = round(ret[f"Recall@{k}"] / len(scores), 5)
ret[f"P@{k}"] = round(ret[f"P@{k}"] / len(scores), 5)

return ret

0 comments on commit b29b10a

Please sign in to comment.