2023-05-20 20:23:17 +02:00
|
|
|
import quapy as qp
|
|
|
|
|
|
|
|
def from_name(err_name):
|
|
|
|
if err_name == 'f1e':
|
|
|
|
return f1e
|
2023-07-27 03:16:41 +02:00
|
|
|
elif err_name == 'f1':
|
|
|
|
return f1
|
2023-05-20 20:23:17 +02:00
|
|
|
else:
|
|
|
|
return qp.error.from_name(err_name)
|
|
|
|
|
2023-07-27 03:16:41 +02:00
|
|
|
def f1(prev):
|
2023-06-05 21:54:22 +02:00
|
|
|
# https://github.com/dice-group/gerbil/wiki/Precision,-Recall-and-F1-measure
|
|
|
|
if prev[0] == 0 and prev[1] == 0 and prev[2] == 0:
|
|
|
|
return 1.0
|
|
|
|
elif prev[0] == 0 and prev[1] > 0 and prev[2] == 0:
|
|
|
|
return 0.0
|
|
|
|
elif prev[0] == 0 and prev[1] == 0 and prev[2] > 0:
|
|
|
|
return float('NaN')
|
|
|
|
else:
|
|
|
|
recall = prev[0] / (prev[0] + prev[1])
|
|
|
|
precision = prev[0] / (prev[0] + prev[2])
|
|
|
|
return 2 * (precision * recall) / (precision + recall)
|
2023-07-27 03:16:41 +02:00
|
|
|
|
|
|
|
def f1e(prev):
|
|
|
|
return 1 - f1(prev)
|