performance_measure.py 1.25 KB
#! 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
		}