metrics.py 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. # -*- coding: utf-8 -*-
  2. import time
  3. def result_dict_from_predictions(evidences, real_labels, predictions):
  4. correct = []
  5. incorrect = []
  6. tp, fp, tn, fn = 0.0, 0.0, 0.0, 0.0
  7. for evidence, real, predicted in zip(evidences, real_labels, predictions):
  8. if real == predicted:
  9. correct.append(evidence.id)
  10. if real:
  11. tp += 1
  12. else:
  13. tn += 1
  14. else:
  15. incorrect.append(evidence.id)
  16. if predicted:
  17. fp += 1
  18. else:
  19. fn += 1
  20. # Make stats
  21. try:
  22. precision = tp / (tp + fp)
  23. except ZeroDivisionError:
  24. precision = 1.0
  25. try:
  26. recall = tp / (tp + fn)
  27. except ZeroDivisionError:
  28. recall = 1.0
  29. try:
  30. f1 = 2 * (precision * recall) / (precision + recall)
  31. except ZeroDivisionError:
  32. f1 = 0.0
  33. result = {
  34. "true_positives": tp,
  35. "false_positives": fp,
  36. "true_negatives": tn,
  37. "false_negatives": fn,
  38. "accuracy": (tp + tn) / len(evidences),
  39. "precision": precision,
  40. "recall": recall,
  41. "f1": f1,
  42. "end_time": time.time()
  43. }
  44. return result