Crear Matriz de Confusión

PythonBeginner
Practicar Ahora

Introducción

En este proyecto, aprenderás cómo implementar una matriz de confusión, que es una herramienta fundamental para evaluar el rendimiento de un modelo de clasificación. La matriz de confusión proporciona una desglose detallado de las predicciones del modelo, lo que te permite identificar áreas de mejora y obtener valiosas perspectivas sobre las fortalezas y debilidades del modelo.

🎯 Tareas

En este proyecto, aprenderás:

  • Cómo implementar la función confusion_matrix para calcular la matriz de confusión para un problema de clasificación
  • Cómo probar y refinar la función confusion_matrix para manejar casos límite y mejorar su robustez
  • Cómo documentar la función confusion_matrix para que sea más amigable para el usuario y más fácil de entender
  • Cómo integrar la función confusion_matrix en un proyecto de aprendizaje automático más grande y utilizarla para evaluar el rendimiento de un modelo de clasificación

🏆 Logros

Después de completar este proyecto, podrás:

  • Calcular e interpretar la matriz de confusión para un problema de clasificación
  • Aplicar técnicas para manejar casos límite y mejorar la robustez de una función
  • Implementar mejores prácticas para documentar y hacer el código más amigable para el usuario
  • Aplicar la matriz de confusión en el contexto de un proyecto de aprendizaje automático más grande

Implementar la función de matriz de confusión

En este paso, implementarás la función confusion_matrix en el archivo confusion_matrix.py. Esta función calculará la matriz de confusión para un problema de clasificación.

La función confusion_matrix toma tres entradas:

  1. labels: Una lista de etiquetas que representan las diferentes clases.
  2. preds: Una lista de predicciones, donde cada predicción es una lista de probabilidades correspondientes a las clases en la lista labels.
  3. ground_truth: Una lista de etiquetas de verdad básica (ground truth).

La función debe devolver la matriz de confusión como una lista de listas, donde cada lista interna representa una fila en la matriz.

Aquí está el código de inicio para la función confusion_matrix:

def confusion_matrix(
    labels: List, preds: List[List[float]], ground_truth: List
) -> List[List[int]]:
    """
    Calcular la matriz de confusión para un problema de clasificación.

    La función toma una lista de etiquetas, una lista de predicciones (cada una como una lista de probabilidades
    para cada clase) y una lista de etiquetas de verdad básica, y devuelve una matriz de confusión.
    La matriz de confusión es una matriz cuadrada donde la entrada (i, j) es el número de veces que la clase i
    se predijo cuando la clase real era j.

    Parámetros:
    labels (List): Una lista de etiquetas que representan las diferentes clases.
    preds (List[List[float]]): Una lista de predicciones donde cada predicción es una lista de
                               probabilidades correspondientes a las clases en la lista de etiquetas.
    ground_truth (List): Una lista de etiquetas de verdad básica.

    Devuelve:
    List[List[int]]: La matriz de confusión representada como una lista de listas donde cada lista
                     representa una fila en la matriz.
    """
    ## Esto crea una matriz cuadrada con dimensiones iguales al número de clases, inicializando todos los elementos en cero. Cada fila y columna corresponde a una etiqueta de clase.
    matrix = [[0 for _ in range(len(labels))] for _ in range(len(labels))]

    ## Este bucle empareja cada predicción con su correspondiente etiqueta de verdad básica y los procesa uno por uno.
    for pred, truth in zip(preds, ground_truth):
        ## Utiliza NumPy para encontrar el índice de la mayor probabilidad en la lista de predicciones, que corresponde a la clase predicha.
        pred_index = np.argmax(pred)
        ## Encuentra el índice de la etiqueta de clase real en la lista `labels`.
        truth_index = labels.index(truth)
        ## Esta línea incrementa la celda en la intersección de la fila de la clase predicha y la columna de la clase real en la matriz de confusión, contando efectivamente la ocurrencia de este par de predicción-verdad básica específico.
        matrix[pred_index][truth_index] += 1

    ## Después de procesar todas las predicciones, la función devuelve la matriz de confusión calculada.
    return matrix

En la función confusion_matrix, implementas la lógica para calcular la matriz de confusión para un problema de clasificación.

✨ Revisar Solución y Practicar

Probar la función de matriz de confusión

En este paso, probarás la función confusion_matrix utilizando el ejemplo proporcionado.

Agrega el siguiente código en el archivo confusion_matrix.py:

if __name__ == "__main__":
    labels = ["Python", "Java", "C++"]
    preds = [
        [0.66528198, 0.21971853, 0.11499949],
        [0.34275858, 0.05847305, 0.59876836],
        [0.47650585, 0.26353373, 0.25996042],
        [0.76153846, 0.15384615, 0.08461538],
        [0.04691943, 0.9478673, 0.00521327],
    ]
    ground_truth = ["Python", "C++", "Java", "C++", "Java"]
    matrix = confusion_matrix(labels, preds, ground_truth)
    print(matrix)

Ejecuta el archivo confusion_matrix.py para ejecutar el ejemplo:

python confusion_matrix.py

La salida debe ser:

[[1, 1, 1],
 [0, 1, 0],
 [0, 0, 1]]

Verifica que la salida coincida con la matriz de confusión esperada.

Si la salida no es la esperada, revisa la implementación de la función confusion_matrix y realiza las correcciones necesarias.

✨ Revisar Solución y Practicar

Resumen

¡Felicidades! Has completado este proyecto. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.