-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathmetrics.py
More file actions
42 lines (32 loc) · 1.11 KB
/
Copy pathmetrics.py
File metadata and controls
42 lines (32 loc) · 1.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import math
class BooleanMetrics:
def __init__(self, pred, target):
self.TP = (pred & target).sum().item()
self.TN = (~pred & ~target).sum().item()
self.FP = (pred & ~target).sum().item()
self.FN = (~pred & target).sum().item()
def Accuracy(self):
if self.TP + self.TN + self.FP + self.FN == 0:
return math.nan
return (self.TP + self.TN) / (self.TP + self.TN + self.FP + self.FN)
def F1(self):
if 2 * self.TP + self.FP + self.FN == 0:
return math.nan
return (2 * self.TP) / (2 * self.TP + self.FP + self.FN)
def Precision(self):
if self.TP + self.FP == 0:
return math.nan
return self.TP / (self.TP + self.FP)
def Recall(self):
if self.TP + self.FN == 0:
return math.nan
return self.TP / (self.TP + self.FN)
class RunningAverage:
def __init__(self):
self.N = 0
self.avg = 0
def add(self, val):
if math.isnan(val):
return
self.avg = ((self.avg * self.N) + val) / (self.N+1)
self.N += 1