Skip to content

Instantly share code, notes, and snippets.

@haozhu233
Created May 22, 2025 16:21
Show Gist options
  • Save haozhu233/302767634565b72310a941b8c18be981 to your computer and use it in GitHub Desktop.
Save haozhu233/302767634565b72310a941b8c18be981 to your computer and use it in GitHub Desktop.
eval metrics for bio-reasoning v1.
from sklearn.metrics import (
average_precision_score,
f1_score,
roc_auc_score,
precision_score,
recall_score,
accuracy_score
)
def evaluate_bi_cls(y_true, y_pred):
results = {
'PRAUC': float(average_precision_score(y_true, y_pred)),
'F1': float(f1_score(y_true, y_pred)),
'ROCAUC': float(roc_auc_score(y_true, y_pred)),
'Precision': float(precision_score(y_true, y_pred)),
'Recall': float(recall_score(y_true, y_pred)),
'Accuracy': float(accuracy_score(y_true, y_pred))
}
return results
def ndcg_at_k(predicted, ground_truth, k=10):
gt_genes = set(g.split(' ')[0] for g in ground_truth)
relevance = [1 if g.split(' ')[0] in gt_genes else 0 for g in predicted[:k]]
ideal = sorted(relevance, reverse=True)
def dcg(scores):
return sum(rel / np.log2(i + 2) for i, rel in enumerate(scores))
ideal_dcg = dcg(ideal)
return dcg(relevance) / ideal_dcg if ideal_dcg > 0 else 0.0
def recall_at_k(predicted, ground_truth, k=10):
top_k_genes = set(g.split(' ')[0] for g in predicted[:k])
gt_genes = set(g.split(' ')[0] for g in ground_truth)
matched = top_k_genes & gt_genes
return len(matched) / len(gt_genes) if gt_genes else 0.0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment