-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathevaluation.py
81 lines (69 loc) · 1.98 KB
/
evaluation.py
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# -*- coding: utf-8 -*-
"""
Created on Mon Feb 27 21:59:16 2017
@author: josemiguelarrieta
"""
import numpy as np
def evaluationEnsemble(truelab,outlab):
"""
Example:
truelab = np.array([1,0,1,0,0])
truelab = truelab.reshape(len(truelab),1)
outlab = np.array([1,0,1,0,0])
outlab = outlab.reshape(len(outlab),1)
metrics = evaluationEnsemble(truelab,outlab)
"""
It = np.where(truelab == 1)[0]
Io = np.where(truelab == 0)[0]
TP = np.sum(outlab[It])
FN = np.sum(np.logical_not(outlab[It]))
FP = np.sum(outlab[Io])
TN = np.sum(np.logical_not(outlab[Io]))
print('TP: '+str(TP)+' FN:'+str(FN)+' FP:'+str(FP)+' TN: '+str(TN))
try:
P = float(TP)/(TP+FP)
except ZeroDivisionError:
print "Oops! That was no valid number."
P = 0
try:
R = float(TP)/(TP+FN)
except ZeroDivisionError:
print "Oops! That was no valid number."
R = 0
try:
F = 2*(R*P)/(R+P)
except ZeroDivisionError:
print "Oops! That was no valid number."
F = 0
try:
G = np.sqrt(float(R)*(float(TN)/(TN+FP)))
except ZeroDivisionError:
print "Oops! That was no valid number."
G = 0
try:
tpr = float(TP)/(TP+FN)
except ZeroDivisionError:
print "Oops! That was no valid number."
tpr = 0
try:
fpr = float(FP)/(FP+TN)
except ZeroDivisionError:
print "Oops! That was no valid number."
fpr = 0
try:
e = (float(FP)+FN)/(FP+FN+TP+TN)
except ZeroDivisionError:
print "Oops! That was no valid number."
e = 0
if F is None:
F = 0
if G is None:
G = 0
if P is None:
P = 0
if R is None:
R = 0
AUC = (tpr*fpr)/2 + tpr*(1-fpr) + ((1-tpr)*(1-fpr))/2
MCD = ((1-e) + 2*AUC + 2*F + 2*G)/7
metrics = [e, TP, FN, FP, TN, P, R, F, G, AUC, MCD]
return metrics