Matriz de confusión

Este tutorial presenta la matriz de confusión, su uso en el contexto de la clasificación multiclase y los sesgos que pueden percibirse erróneamente al discutir los resultados.

matriz de confusión

matriz de confusión 2x2

Se utiliza una matriz de confusión para representar los resultados de una clasificación binaria. Verdaderos positivos, falsos positivos, verdaderos negativos y falsos negativos.

matriz de confusión

Los elementos en azul son los predichos correctamente (sombrero Y), y los en rojo incorrectamente.

Veamos cómo construir una matriz de confusión y entender su terminología. Considere que necesitamos modelar un clasificador que clasifique 2 tipos de frutas. Tenemos dos tipos de frutas (manzanas y uvas) y queremos que nuestro modelo de aprendizaje automático identifique o clasifique la fruta determinada como manzana o uva.

Por tanto, tomamos 15 muestras de 2 frutas, de las cuales 8 pertenecen a la clase Manzana y 7 pertenecen a la clase Uva. La clase no es más que la salida, en este ejemplo tenemos 2 clases de salida: Manzanas y Uvas. Representaremos a Apple como clase 1 y a Grape como clase 0.

La clase real de 8 manzanas y 7 uvas se puede representar de la siguiente manera:

Real = [1,1,1,1,1,1,1,1,0,0,0,0,0,0,0]

El modelo clasificador predice 1 para Apple y 0 para Grape.

Supongamos que el clasificador toma las 15 entradas y hace las siguientes predicciones:

  • De 8 manzanas, clasificará correctamente 5 como manzanas y predecirá incorrectamente 3 como uvas.
  • De 7 uvas, clasificará correctamente 5 como uvas y predecirá erróneamente 2 como manzanas.

La predicción del clasificador puede ser la siguiente:

Predicción = [1,0,0,0,1,1,1,1,0,0,0,0,0,1,1]

# Creación de matriz de confusión en el uso de sklearn
desde sklearn.metrics importe confusion_matrix
#Dejemos que el valor real sea 1 para manzana y 0 para uvas para nuestro ejemplo.
ACTUAL = [1,1,1,1,1,1,1,1,0,0,0,0,0,0,0]
# Sean los valores predichos
PREDICCIÓN= [1,0,0,0,1,1,1,1,0,0,0,0,0,1,1]
# Matriz de confusión para valores reales y previstos.
matriz = confusión_matriz(ACTUAL,PREDICCIÓN, etiquetas=[1,0])
print('Matriz de confusión: n',matriz)
Orden de valores de resultados # en sklearn
TP, FN, FP, TN = confusión_matrix(ACTUAL,PREDICCIÓN,etiquetas=[1,0]).reshape(-1)
print('Valores de resultado: n', TP, FN, FP, TN)

Para nuestro ejemplo, el valor positivo es Apple y el valor negativo es Grape.

Verdadero positivo: esto significa que el valor real y los valores predichos son los mismos. En nuestro caso, el valor real también es una manzana y la predicción del modelo también es una manzana. Si observa la celda TP, el valor positivo es el mismo para Real y Predicho.

Falso negativo: Esto significa que el valor verdadero es positivo. En nuestro caso es manzana, pero el modelo la predijo como negativa, es decir, uva. Por tanto, el modelo dio una mala predicción. Se suponía que esto daría un resultado positivo (manzana), pero dio un resultado negativo (uva). Entonces, cualquier resultado negativo que obtengamos es falso; de ahí el nombre de falso negativo.

Falso positivo: Esto significa que el valor verdadero es negativo. En nuestro caso es uva, pero el modelo la predijo como positiva, es decir, manzana. Por tanto, el modelo dio una mala predicción. Se suponía que daría un resultado negativo (uva), pero dio un resultado positivo (manzana), por lo que cualquier resultado positivo que obtengamos es falso, de ahí el nombre falso positivo.

Verdadero negativo: esto significa que el valor real y los valores predichos son los mismos. En nuestro caso, los valores reales son las uvas y la predicción también son las uvas. Los valores para el ejemplo anterior son: TP=5, FN=3, FP=2, TN=5.

Ya conoces la teoría, ahora pongámosla en práctica. Codifiquemos una matriz de confusión con la biblioteca Scikit-learn (sklearn) en Python.

Sklearn tiene dos funciones interesantes: confusion_matrix() y Classification_report().

Sklearn confusion_matrix() devuelve los valores de la matriz de confusión. El resultado, sin embargo, es ligeramente diferente de lo que hemos estudiado hasta ahora. Toma las filas como valores reales y las columnas como valores predichos. El resto del concepto sigue siendo el mismo.

Sklearn Classification_report() genera precisión, recuperación y puntuación f1 para cada clase objetivo. Además de esto, también tiene valores adicionales: micro promedio, macro promedio y promedio ponderado.

El promedio de Mirco es la puntuación de precisión/recuperación/f1 calculada para todas las clases.

El promedio macro es el promedio de precisión/recuperación/puntuación f1.

El promedio ponderado es simplemente el promedio ponderado de la puntuación de precisión/recuperación/f1.

Matriz de confusión multiclase, ejemplo 3x3

Intentemos comprender la matriz de confusión para 3 clases y la matriz de confusión para múltiples clases con un conjunto de datos popular: IRIS DATASET.

El conjunto de datos contiene 3 flores como salidas o clases, Versicolor, Virginia y Setosa.

Usando la longitud del pétalo, el ancho del pétalo, la longitud del sépalo y el ancho del sépalo, el modelo debe clasificar la instancia dada como una flor Versicolor, Virginia o Setosa.

Apliquemos aquí un modelo clasificador. Podemos utilizar la regresión logística, pero se aplica un clasificador de árbol de decisión al conjunto de datos anterior. El conjunto de datos tiene 3 clases; obtenemos por tanto una matriz de confusión de 3 X 3.

Pero ¿cómo saber los valores de TP, TN, FP y FN?

En el problema de clasificación multiclase, no obtendremos directamente los valores de TP, TN, FP y FN como en el problema de clasificación binaria. Para la validación necesitamos calcular para cada clase.

1TP5Importar paquetes
importar panda as p.d.
importar entumecido as notario público.
importar nacido en el mar as redes sociales
importar matplotlib.pyplot as por favor
#Importación de conjunto de datos a marco de datos. 
d.f. = pd.read_csv("../input/iris-flower-dataset/IRIS.csv")
#Para ver las primeras 5 filas del conjunto de datos
df.cabeza()
#Conocer los tipos de datos de las variables.
df.dtipos
#Especies es La salida clase,para conocer el conteo de cada clase usamos value_counts() df['Especie'].value_counts()
#Separación de variable independiente y variable dependiente("Especie")
X = df.soltar(['Especies'], eje=1) y = d.f.['Especies']
Impresión # (X.head())
impresión(forma de X)
Impresión # (y.head())
impresión(forma de y)
# División del conjunto de datos para entrenar y probar
de sklearn.model_selection importar train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, estado_aleatorio=0)
#to Conozca la forma del tren y pruebe el conjunto de datos.
impresión(X_train.forma)
impresión(y_train.forma)
impresión(X_test.forma)
impresión(y_test.forma)
#Utilizamos el clasificador de vectores de soporte como clasificador.
de sklearn.svm importar CVS
de sklearn.métricas importar matriz de confusión
#entrenando el clasificador usando X_Train e y_train 
clf = SVC(núcleo = 'lineal').fit(X_train,y_train) clf.predict(X_train)
#Probar el modelo usando X_test y almacenar la salida en y_pred
y_pred = clf.predict(X_prueba)
# Creando una matriz de confusión, que compara y_test e y_pred
cm = matriz_confusión(y_test, y_pred)
# Crear un marco de datos para una matriz de confusión con formato de matriz, por lo que será fácil de trazar.
cm_df = pd.DataFrame(cm,
                     índice = ['SETOSA','VERSICOLR','VIRGÍNICA'], 
                     columnas = ['SETOSA','VERSICOLR','VIRGÍNICA'])
#Plotaje la matriz de confusión plt.cifra(tamaño de figura =(5,4)) redes sociales.mapa de calor(cm_df, annot=Verdadero) plt.título('Matriz de confusión') plt.ylabel('Valores reales') plt.xlabel('Valores previstos') plt.espectáculo()

Como se dijo antes, FN: el valor falso negativo de una clase será la suma de los valores de las filas correspondientes, excepto el valor TP. FP: El valor falso positivo de una clase será la suma de los valores de la columna correspondiente excepto el valor TP. TN: El valor verdadero negativo de una clase será la suma de los valores de todas las columnas y filas, excepto los valores de esa clase para la cual estamos calculando los valores. Y TP: el valor verdadero positivo es aquel en el que el valor real y el valor predicho son iguales.

La matriz de confusión para el conjunto de datos IRIS es la siguiente:

matriz de confusión

Calculemos los valores de TP, TN, FP y FN para la clase Setosa usando los consejos anteriores:

TP: El valor real y el valor previsto deben ser iguales. Entonces, con respecto a la clase Setosa, el valor de la celda 1 es el valor de TP.

FN: la suma de los valores de las líneas correspondientes excepto el valor TP

FN = (celda 2 + celda 3) = (0 + 0) = 0

FP: La suma de los valores de la columna correspondiente excepto el valor de TP.

FP = (celda 4 + celda 7) = (0 + 0) = 0

TN: La suma de los valores de todas las columnas y filas, excepto los valores de la clase para la cual estamos calculando los valores.

TN = (celda 5 + celda 6 + celda 8 + celda 9) = 17 + 1 +0 + 11 = 29

De manera similar, para la clase Versicolor, los valores/métricas se calculan de la siguiente manera:

TP: 17 (celda 5)

FN: 0 + 1 = 1 (celda 4 + celda 6)

FP: 0 + 0 = 0 (celda 2 + celda 8)

TN: 16 +0 +0 + 11 =27 (celda 1 + celda 3 + celda 7 + celda 9).

Puedes probar el curso de Virginia.

Medida interpretativa

La matriz de confusión nos permite medir la recuperación y la precisión, que, junto con la precisión y la curva AUC-ROC, son las métricas utilizadas para medir el rendimiento de los modelos de ML.

El recuerdo se puede explicar diciendo, entre todas las clases positivas, cuántas predijimos correctamente. El retiro debe ser lo más alto posible.

La precisión se puede explicar diciendo, de todas las clases que predijimos como positivas, cuántas son realmente positivas. La precisión debe ser la mayor posible.

Entre todas las clases (positivas y negativas), la precisión determina cuántas de ellas predijimos correctamente. En este caso será 4/7. La precisión debe ser la mayor posible.

matriz de confusión

Es difícil comparar dos modelos con baja precisión y alta recuperación o viceversa. Entonces, para hacerlos comparables, utilizamos el F-Score. La puntuación F nos permite medir la memoria y la precisión simultáneamente. Utiliza la media armónica en lugar de la media aritmética, castigando más los valores extremos.

Puntuación F1

Existen muchas otras medidas de precisión, cada una de las cuales tiene usos y usos muy específicos:

matriz de confusión

a- el número de casos positivos reales en los datos

b- Un resultado de prueba que indique correctamente la presencia de una condición o característica

c- Error de tipo II: un resultado de prueba que indica falsamente que una condición o atributo particular está ausente

d- el número de casos negativos reales en los datos

e- Error de tipo I: un resultado de prueba que indica falsamente que una condición o atributo particular está presente

f- Un resultado de prueba que indica correctamente la ausencia de una condición o característica

Evaluar sesgos y árbol de decisión.

Al evaluar un modelo, las métricas recopiladas frente a una prueba completa o un conjunto de validación no siempre brindan una imagen clara de qué tan justo es ese modelo.

Tomemos el ejemplo de un nuevo modelo desarrollado para predecir la presencia de tumores, evaluado en un conjunto de validación de 1.000 pacientes. 500 registros correspondientes a mujeres y 500 a hombres. La siguiente matriz de confusión resume los resultados obtenidos para los 1000 ejemplos:

Verdaderos positivos (VP): 16 Falsos positivos (FP): 4
Falso negativo (FN): 6 Verdadero negativo (TN): 974

Precisión = 0,800, recuperación = 0,727

Estos resultados parecen prometedores: precisión de 80% y recuperación de 72,7%. Pero ¿qué pasa si calculamos el resultado por separado para cada conjunto de pacientes? Dividamos los resultados en dos matrices de confusión separadas: una para mujeres y otra para hombres. Para las distribuciones, también es posible utilizar el árbol de decisiones como ayuda.

matriz de confusión

Cuando calculamos las métricas para pacientes masculinos y femeninos por separado, observamos marcadas diferencias en el rendimiento del modelo para cada grupo.

Mujer:

  • De las 11 mujeres que tenían tumores, el modelo predijo correctamente un resultado positivo para 10 pacientes (tasa de recuperación: 90,9%). En otras palabras, el modelo no detecta tumor en 9.1% de casos femeninos.

  • Asimismo, cuando el modelo arroja un resultado tumoral positivo en mujeres, es correcto en 10 de 11 casos (tasa de precisión: 90,9%). En otras palabras, El modelo predice incorrectamente el tumor en casos femeninos de 9.1%..

Hombres:

  • Sin embargo, de los 11 pacientes masculinos que tenían tumores, el modelo predijo correctamente un resultado positivo sólo en 6 pacientes (tasa de recuperación: 54,5%). Eso significa que el modelo no detecta tumor en 45,5% de casos de hombres.

  • Cuando el modelo da un resultado tumoral positivo en hombres, es correcto sólo en 6 de 9 casos (es decir, una tasa de precisión de 66,7%). En otras palabras, El modelo predice incorrectamente el tumor en 33.31 casos de TP3T para hombres..

Ahora comprendemos mucho mejor los sesgos inherentes a las predicciones del modelo, así como los riesgos asociados con cada subgrupo si la población general lo utilizara con fines médicos.