performance_measure.py
1.25 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
43
44
45
46
47
48
49
50
51
52
53
54
#! python
import sys
import csv
import numpy as np
class Performance:
def __init__(self,arr):
self.arr = arr
self.Compute_stat()
def Compute_stat(self):
positive = (self.arr[:,0] == 1)
negative = (self.arr[:,0] == 0)
self.TP = float(np.sum(self.arr[positive,1]))
self.TN = float(np.sum(self.arr[negative,1]==0))
self.FP = float(np.sum(self.arr[positive,1]==0))
self.FN = float(np.sum(self.arr[negative,1]))
#More advanced measure
def Sensitivity(self):
return self.TP/(self.TP+self.FN)
def Specificity(self):
return self.TN / (self.TN + self.FP)
def Precision(self):
return self.TP /(self.TP +self.FP)
# Advanced measure
def Accuracy(self):
return (self.TP + self.TN)/(self.TP+self.FP+self.FN+self.TN)
def F1(self):
return 2*self.TP/(2*self.TP + self.FP + self.FN)
def MCC(self):
tmp1 = (self.TP*self.TN - self.FP * self.FN)
tmp2 = np.sqrt((self.TP+self.FP)*(self.TP+self.FN)*(self.TN+self.FP)*(self.TN+self.FN))
return tmp1/ tmp2
def All_measures(self):
return {
"Sensitivity" : self.Sensitivity(),
"Specificity" : self.Specificity(),
"Precision" : self.Precision(),
"Accuracy" : self.Accuracy(),
"F1" : self.F1(),
"MCC" : self.MCC(),
"TP" : self.TP,
"TN" : self.TN,
"FP" : self.FP,
"FN" : self.FN
}