57 lines
1.7 KiB
Python
Executable File
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}
|
|
""")
|