Visualize a matriz de confusão usando o pacote Caret em R

Jinku Hu 30 janeiro 2023
  1. Use a função confusedMatrix para criar um array de confusão em R
  2. Use a função fourfoldplot para visualizar a matriz de confusão em R
  3. Use a função autoplot para visualizar a matriz de confusão em R
Visualize a matriz de confusão usando o pacote Caret em R

Este artigo irá demonstrar vários métodos de visualização de um array de confusão usando o pacote caret em R.

Use a função confusedMatrix para criar um array de confusão em R

A função confusedMatrix é parte do pacote caret e pode criar um array de confusão a partir dos fatores ou tipos de dados da tabela. Observe que construímos dois fatores aleatórios usando as funções sample e rep. ConfusedMatrix leva o fator de classes previstas como o primeiro argumento e o fator de classes a ser usado como resultados verdadeiros como o segundo.

library(caret)

confusionMatrix(
  factor(sample(rep(letters[1:4], 200), 50)),
  factor(sample(rep(letters[1:4], 200), 50)))  
Confusion Matrix and Statistics

          Reference
Prediction a b c d
         a 2 5 6 2
         b 3 2 4 2
         c 3 5 2 2
         d 5 1 2 4

Overall Statistics

               Accuracy : 0.2             
                 95% CI : (0.1003, 0.3372)
    No Information Rate : 0.28            
    P-Value [Acc > NIR] : 0.9260          

                  Kappa : -0.0672         

 Mcnemar's Test P-Value : 0.7795          

Statistics by Class:

                     Class: a Class: b Class: c Class: d
Sensitivity            0.1538   0.1538   0.1429   0.4000
Specificity            0.6486   0.7568   0.7222   0.8000
Pos Pred Value         0.1333   0.1818   0.1667   0.3333
Neg Pred Value         0.6857   0.7179   0.6842   0.8421
Prevalence             0.2600   0.2600   0.2800   0.2000
Detection Rate         0.0400   0.0400   0.0400   0.0800
Detection Prevalence   0.3000   0.2200   0.2400   0.2400
Balanced Accuracy      0.4012   0.4553   0.4325   0.6000

Use a função fourfoldplot para visualizar a matriz de confusão em R

A função confusedMatrix produz os dados textuais, mas podemos visualizar a parte deles com a ajuda da função fourfoldplot. fourfoldplot constrói um gráfico quádruplo com uma tabela de contingência dois por dois por k. A tabela de contingência deve ser passada em forma de array ou como um array 2x2 se k for igual a 1. Observe que o exemplo a seguir demonstra o uso de fourfoldplot com os dados da tabela embutidos em código.

ctable <- as.table(matrix(c(42, 6, 8, 28), nrow = 2, byrow = TRUE))
fourfoldplot(ctable, color = c("cyan", "pink"),
             conf.level = 0, margin = 1, main = "Confusion Matrix")

visualizar matriz de confusão 1

Por outro lado, podemos armazenar confusedMatrix como um objeto e passar o membro table dele para o fourfoldplot para visualizar a matriz de confusão.

library(caret)

cmat <- confusionMatrix(
  factor(sample(rep(letters[1:2], 200), 50)),
  factor(sample(rep(letters[1:2], 200), 50)))  

fourfoldplot(cmat$table, color = c("cyan", "pink"),
             conf.level = 0, margin = 1, main = "Confusion Matrix")

visualizar matriz de confusão 2

Use a função autoplot para visualizar a matriz de confusão em R

Alternativamente, podemos utilizar a função autoplot do pacote ggplot2 para exibir a matriz de confusão. Neste caso, construímos a matriz com a função conf_mat que produz um objeto da classe conf_mat que pode ser passado diretamente como o primeiro argumento para a função autoplot. Este último determina automaticamente o desenho de um gráfico correspondente para o objeto.

library(yardstick)
library(ggplot2)

set.seed(123)
truth_predicted <- data.frame(
  obs = sample(0:1,100, replace = T),
  pred = sample(0:1,100, replace = T)
)
truth_predicted$obs <- as.factor(truth_predicted$obs)
truth_predicted$pred <- as.factor(truth_predicted$pred)

cm <- conf_mat(truth_predicted, obs, pred)

autoplot(cm, type = "heatmap") +
  scale_fill_gradient(low = "pink", high = "cyan")

visualizar matriz de confusão 3

Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Artigo relacionado - R Matrix