Newer
Older
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
from packages import *
class metrics:
def __init__(self, c:Optional[float] = None, cv:Optional[List] = None, t:Optional[List] = None, method = 'regression')-> DataFrame:
phase = [c, cv, t]
index = np.array(["train", "cv", "test"])
notnone = [i for i in range(3) if phase[i] != None]
met_index = index[notnone]
methods = ['regression', 'classification']
perf = {}
for i in notnone:
if method == 'regression':
perf[index[i]] = metrics.reg_(phase[i][0], phase[i][1])
elif method == 'classification':
perf[index[i]] = metrics.class_(phase[i][0], phase[i][1])
if notnone == 1:
self.ret = perf.T
else:
self.ret = DataFrame(perf).T
@staticmethod
def reg_(meas, pred):
meas = np.array(meas)
pred = np.array(pred)
xbar = np.mean(meas) # the average of measured values
e = np.subtract(meas , pred)
e2 = e**2# the squared error
# Sum of squared:
# TOTAL
sst = np.sum((meas - xbar)**2)
# RESIDUAL
ssr = np.sum(e2)
# REGRESSION OR MODEL
ssm = np.sum(pred - xbar)
# Compute statistical metrics
metr = {}
metr['r'] = np.corrcoef(meas, pred)[0, 1]
metr['r2'] = 1-ssr/sst
metr['rmse'] = np.sqrt(np.mean(e2))
metr['mae'] = np.mean(np.abs(e2))
metr['rpd'] = np.std(meas)/np.sqrt(np.mean(e2))
metr['rpiq'] = (np.quantile(meas, .75) - np.quantile(meas, .25))/np.sqrt(np.mean(e2))
return metr
@staticmethod
def class_(meas, pred):
pass
@property
def scores_(self):
return self.ret