-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathconfusion_matrix_sample.py
64 lines (51 loc) · 1.86 KB
/
confusion_matrix_sample.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
import numpy as np
# 1 para grávida, 0 para não grávida
valores_reais = [1, 0, 1, 0, 0, 0, 1, 0, 1, 0]
valores_preditos = [1, 0, 0, 1, 0, 0, 1, 1, 1, 0]
def get_confusion_matrix(reais, preditos, labels):
"""
Uma função que retorna a matriz de confusão para uma classificação binária
Args:
reais (list): lista de valores reais
preditos (list): lista de valores preditos pelo modelos
labels (list): lista de labels a serem avaliados.
É importante que ela esteja presente, pois usaremos ela para entender
quem é a classe positiva e quem é a classe negativa
Returns:
Um numpy.array, no formato:
numpy.array([
[ tp, fp ],
[ fn, tn ]
])
"""
# não implementado
if len(labels) > 2:
return None
if len(reais) != len(preditos):
return None
# considerando a primeira classe como a positiva, e a segunda a negativa
true_class = labels[0]
negative_class = labels[1]
# valores preditos corretamente
tp = 0
tn = 0
# valores preditos incorretamente
fp = 0
fn = 0
for (indice, v_real) in enumerate(reais):
v_predito = preditos[indice]
# se trata de um valor real da classe positiva
if v_real == true_class:
tp += 1 if v_predito == v_real else 0
fp += 1 if v_predito != v_real else 0
else:
tn += 1 if v_predito == v_real else 0
fn += 1 if v_predito != v_real else 0
return np.array([
# valores da classe positiva
[ tp, fp ],
# valores da classe negativa
[ fn, tn ]
])
print(get_confusion_matrix(reais=valores_reais, preditos=valores_preditos, labels=[1,0]))
# array([[3, 1], [2, 4]]