mass-scraper/evaluate.py

57 lines
1.7 KiB
Python
Executable File

#!/usr/bin/env python3
import sys
positive = 0
negative = 0
true_positive = 0
false_positive = 0
true_negative = 0
false_negative = 0
for line in sys.stdin:
predicted, actual = line.rstrip('\n').split('\t')
if 'yes' in predicted and 'yes' in actual:
true_positive += 1
positive += 1
if 'yes' in predicted and 'no' in actual:
false_positive += 1
negative += 1
if 'no' in predicted and 'yes' in actual:
false_negative += 1
positive += 1
if 'no' in predicted and 'no' in actual:
true_negative += 1
negative += 1
#true positive rate, sensivity
recall = true_positive / positive
#true negative rate
specificity = true_negative / negative
#positive predictive value
precision = true_positive / (true_positive + false_positive)
negative_predictive_value = true_negative / (true_negative + false_negative)
# false negative rate
miss_rate = 1 - recall # or false_negative / positive
# false positive rate, (negative miss rate)
fall_out = 1 - specificity # or false_positive / negative
false_discovery_rate = 1 - precision # or false_positive/ (false_positive / true_positvie)
false_omission_rate = 1 - negative_predictive_value # or false_negative / (false_negative + true_negative)
accuracy = (true_positive + true_negative) / (positive + negative)
f1 = 2 * (precision * recall) / (precision + recall)
mcc = ((true_positive * true_negative) - (false_positive * false_negative)) / (
(true_positive + false_positive) * (true_positive + false_negative) *
(true_negative + false_positive) * (true_negative + false_negative))**0.5
print(f"""
Recall = {recall}
Precision = {precision}
F1 = {f1}
Accuracy = {accuracy}
MCC = {mcc}
""")