Hay que tener en cuenta que el orden en el que se encuentran los datos en la matriz de confusión devuelta por la función confusion_matrix no es el que utiliza normalmente. El esquema seguido en Scikit-Learn es el siguiente, ordenando las etiquetas de filas y columnas (False y True) por orden alfabético:
Podemos extraer los valores de la siguiente forma:
tn, fp, fn, tp = confusion_matrix(y_real, y_pred).ravel()
tn, fp, fn, tp
(3, 2, 1, 4)
Donde tn = True Negatives, etc.
Otra opción para visualizar la matriz según el esquema más común es girar la transpuesta de la matriz:
c = confusion_matrix(y_real, y_pred)
np.flip(c.T)
La función confusion_matrix acepta el argumento labels que permite especificar el orden en el que se mostrarán los valores involucrados en la predicción. En el ejemplo anterior, estos valores son 0 y 1. De esta forma, podríamos forzar que el valor 1 se mostrase antes que el valor 0 en el resultado devuelto por la función:
confusion_matrix(y_real, y_pred, labels = [1, 0])
array([[4, 1],
[2, 3]], dtype=int64)
Otra opción interesante es convertir el array devuelto en DataFrame y añadir las etiquetas de filas y columnas:
labels = [0, 1]
c = confusion_matrix(y_real, y_pred, labels = labels)
pd.DataFrame(c, index = labels, columns = labels)