-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathEvals.py
More file actions
55 lines (40 loc) · 1.38 KB
/
Evals.py
File metadata and controls
55 lines (40 loc) · 1.38 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
# coding: utf-8
# In[1]:
import seaborn as sn
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
# In[17]:
def get_pos_and_negs(pred,true):
tp = sum(pred[pred == 1] == true[pred == 1])
fp = sum(pred[pred == 1] != true[pred == 1])
tn = sum(pred[pred == 0] == true[pred == 0])
fn = sum(pred[pred == 0] != true[pred == 0])
return tp,fp,tn,fn
def get_rates(pred,true):
tp,fp,tn,fn = get_pos_and_negs(pred,true)
tpr = tp/float(len(true[true==1]))
fpr = fp/float(len(true[true==0]))
tnr = tn/float(len(true[true==0]))
fnr = fn/float(len(true[true==1]))
return tpr,fpr,tnr,fnr
def get_precision_recall(pred,true):
tp,fp,tn,fn = get_pos_and_negs(pred,true)
precision = tp/max(1.,float(tp+fp))
recall = tp/max(1.,float(tp+fn))
return precision,recall
def get_f1(pred,true):
precision,recall = get_precision_recall(pred,true)
f1 = 2*precision*recall/max(1.,(precision+recall))
return f1
def get_f1_from_pr(precision,recall):
f1_arr = 2*precision*recall/np.maximum(np.ones(len(precision)),precision+recall)
return f1_arr
def get_acc(pred,true):
acc = sum(pred==true)/float(len(true))
return acc
def get_all_metrics(pred,true):
pr,re = get_precision_recall(pred,true)
f1 = get_f1(pred,true)
acc = get_acc(pred,true)
return ('Accuracy',acc),('Precision',pr),('Recall',re),('F1',f1)