Tipos de Normalizações utilizadas na matriz de confusão com Scikit-Learn
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.
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:
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:
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:
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!