Tipos de Normalizações utilizadas na matriz de confusão com Scikit-Learn

Alex Barros
3 min readApr 23, 2021

--

Normalizar os valores podem melhorar a visualização, mas podem trazer mais confusão também

Utilizando o Scikit-Learn conseguimos construir um modelo de Machine Learning com poucas linhas de código. A matriz de confusão é uma das formas mais utilizadas para avaliarmos se esse modelo "é bom" ou não.

A idéia geral é contar o número de vezes que a classe A é classificada como B e quantas vezes ela é classificada corretamente. Geralmente as linhas representam o valor real para as variáveis e as colunas os valores preditos.

Para a imagem abaixo temos os 3 tipos de flores do dataset Iris (https://scikit-learn.org/stable/datasets/toy_dataset.html#iris-plants-dataset). Ou seja, para as 18 amostras da espécie versicolor, 11 foram classificadas corretamente como versicolor e 7 foram classificadas erroneamente como virginica.

Matriz com a representação da quantidade por item

Para gerarmos o gráfico acima, devemos usar a função plot_confusion_matrix do scikit-learn, você já conhecia?

O código abaixo gera esse primeiro plot e os 3 tipos de normalização.

A primeira normalização é a completa para toda a matriz, execute o plot_confusion_matrix com o parâmetro normalize='all' . Com esse parâmetro, os valores apresentados ficarão em percentual relacionado com todas as amostras utilizadas no teste, variando de 0 a 1. O número 16 da primeira figura tornou-se 0.36, ou seja 36% das 45 utilizadas.

O resultado será o abaixo:

Normalização total

Já utilizando o parâmetro normalize='pred', a normalização será executada por coluna. Ou seja, 100% das previsões de setosa estavam certas. E somente 61% das espécies de Virginica foram corretamente classificadas. Como as colunas representam as previsões, o foco está nos dados previstos, essa visualização demonstra que 100% dos itens previstos como setosa e versicolor estavam corretos.

Confiram na figura:

Matriz normalizada por coluna

Com o parâmetro normalize='true', a normalização ocorrerá nas linhas. Ou seja, o foco será demonstrar o percentual real que foi corretamente classificado frente as especies reais, o foco está nos dados verdadeiros. Nesse caso, 100% das amostras que eram setosas e virginica foram corretamente previstas. Mas 39% das que eram versicolor, foram previstas como virginica de modo equivocado.

Vejam a figura abaixo:

Matriz normalizada por linha

Alterando somente o parâmetro normalize já podemos gerar 4 figuras diferentes e ainda causar confusão sobre o seu significado não é mesmo?

Para saber um pouco mais de como a matriz de confusão é gerada consulte tanto a documentação do confusion_matrix quanto a do plot_confusion_matrix.

1- https://scikit-learn.org/stable/modules/generated/sklearn.metrics.confusion_matrix.html

2- https://scikit-learn.org/stable/modules/generated/sklearn.metrics.plot_confusion_matrix.html

Qualquer duvida nos mande uma mensagem no instagram @aprendadatascience.

Obrigado e bons estudos!

--

--

Alex Barros
Alex Barros

Written by Alex Barros

Engenheiro da Computação. Mestre e Doutorando em Computação Aplicada. Coordenador do Escritório de Projetos e Processos no TRT8.

No responses yet