Función R para calcular tasas de matriz de confusión

Última actualización: 2023/03/10

A menudo olvido los nombres y alias (y cómo calcularlos) de las tasas de matriz de confusión y tengo que buscarlos. Finalmente, tuve suficiente y estaba buscando una sola función que pudiera calcular las tasas más utilizadas, como la sensibilidad o la precisión, pero no pude encontrar ninguna que no requiriera que instalara algún paquete R. Por eso escribí mi propio llamado table_metrics y hablaremos brevemente de ello en este post.

he tenido esto Guía simple de terminología de matriz de confusión marcado durante muchos años y sigo refiriéndose a él. Hace un gran trabajo al explicar la lista de tasas que a menudo se calculan a partir de una matriz de confusión para un clasificador binario. Si necesita un repaso de las tasas/métricas de la matriz de confusión, échele un vistazo.

Podemos generar la misma matriz de confusión que la guía Simple con el siguiente código.

generate_example <- function()

confusion <- generate_example()
confusion
#
#        no yes
#   no   50  10
#   yes   5 100

Escribí la función matriz de confusión para generar una matriz de confusión basada en números de casos. La misma matriz de confusión se puede generar con la función al obtenerla de GitHub.

source("https://raw.githubusercontent.com/davetang/learning_r/main/code/confusion_matrix.R")
eg <- confusion_matrix(TP=100, TN=50, FN=5, FP=10)
eg$cm
#
#        no yes
#   no   50  10
#   yes   5 100

Usar el table_metrics función que escribí, también la obtienes directamente de GitHub.

source("https://raw.githubusercontent.com/davetang/learning_r/main/code/table_metrics.R")

La función tiene cuatro parámetros, que se describen a continuación utilizando roxygen2 sintaxis (copiada y pegada del código fuente del table_metrics función).

#' @param tab Confusion matrix of class table
#' @param pos Name of the positive label
#' @param neg Name of the negative label
#' @param truth Where the truth/known set is stored, `row` or `col`

Usar table_metrics en los datos de ejemplo que generamos, tenemos que proporcionar argumentos para los cuatro parámetros.

El primer parámetro es la matriz de confusión almacenada como table.

Los parámetros segundo y tercero son los nombres de las etiquetas positivas y negativas. El ejemplo utilizado yes y noentonces esos son nuestros argumentos de entrada.

Si ha generado una matriz de confusión con las predicciones como filas y las etiquetas de verdad como columnas, cambie el cuarto argumento a 'col'. Nuestras etiquetas de verdad están en las filas, así que 'row' está especificado.

table_metrics(confusion, 'yes', 'no', 'row')
# $accuracy
# [1] 0.909
#
# $misclassifcation_rate
# [1] 0.0909
#
# $error_rate
# [1] 0.0909
#
# $true_positive_rate
# [1] 0.952
#
# $sensitivity
# [1] 0.952
#
# $recall
# [1] 0.952
#
# $false_positive_rate
# [1] 0.167
#
# $true_negative_rate
# [1] 0.833
#
# $specificity
# [1] 0.833
#
# $precision
# [1] 0.909
#
# $prevalance
# [1] 0.636
#
# $f1_score
# [1] 0.9300032

La función devuelve una lista con las tasas/métricas de la matriz de confusión. Puede guardar la lista y el subconjunto para la tasa/métrica que le interese.

my_metrics <- table_metrics(confusion, 'yes', 'no', 'row')
my_metrics$sensitivity
# 0.952

Finalmente, si desea más dígitos significativos (el valor predeterminado es 3), proporciónelo como el quinto argumento.

Tengo algunas notas adicionales sobre evaluación de aprendizaje automático que también puede ser de interés. ¡Y eso es!

Imprimir amigable, PDF y correo electrónico

Fuente del artículo

Deja un comentario