Criar Matriz de Confusão

PythonBeginner
Pratique Agora

Introdução

Neste projeto, você aprenderá como implementar uma matriz de confusão (confusion matrix), que é uma ferramenta fundamental para avaliar o desempenho de um modelo de classificação. A matriz de confusão fornece uma análise detalhada das previsões do modelo, permitindo que você identifique áreas para melhoria e obtenha informações valiosas sobre os pontos fortes e fracos do modelo.

🎯 Tarefas

Neste projeto, você aprenderá:

  • Como implementar a função confusion_matrix para calcular a matriz de confusão para um problema de classificação
  • Como testar e refinar a função confusion_matrix para lidar com casos extremos (edge cases) e melhorar sua robustez
  • Como documentar a função confusion_matrix para torná-la mais amigável ao usuário e mais fácil de entender
  • Como integrar a função confusion_matrix em um projeto de machine learning maior e usá-la para avaliar o desempenho de um modelo de classificação

🏆 Conquistas

Após concluir este projeto, você será capaz de:

  • Calcular e interpretar a matriz de confusão para um problema de classificação
  • Aplicar técnicas para lidar com casos extremos (edge cases) e melhorar a robustez de uma função
  • Implementar as melhores práticas para documentar e tornar o código mais amigável ao usuário
  • Aplicar a matriz de confusão no contexto de um projeto de machine learning maior

Implementar a Função da Matriz de Confusão

Nesta etapa, você implementará a função confusion_matrix no arquivo confusion_matrix.py. Esta função calculará a matriz de confusão para um problema de classificação.

A função confusion_matrix recebe três entradas:

  1. labels: Uma lista de rótulos representando as diferentes classes.
  2. preds: Uma lista de previsões, onde cada previsão é uma lista de probabilidades correspondentes às classes na lista labels.
  3. ground_truth: Uma lista de rótulos de verdade fundamental (ground truth).

A função deve retornar a matriz de confusão como uma lista de listas, onde cada lista interna representa uma linha na matriz.

Aqui está o código inicial para a função confusion_matrix:

def confusion_matrix(
    labels: List, preds: List[List[float]], ground_truth: List
) -> List[List[int]]:
    """
    Calcular a matriz de confusão para um problema de classificação.

    A função recebe uma lista de rótulos, uma lista de previsões (cada uma como uma lista de probabilidades
    para cada classe) e uma lista de rótulos de verdade fundamental, e retorna uma matriz de confusão.
    A matriz de confusão é uma matriz quadrada onde a entrada (i, j) é o número de vezes que a classe i
    foi prevista quando a classe verdadeira era j.

    Parâmetros:
    labels (List): Uma lista de rótulos representando as diferentes classes.
    preds (List[List[float]]): Uma lista de previsões onde cada previsão é uma lista de
                               probabilidades correspondentes às classes na lista de rótulos.
    ground_truth (List): Uma lista de rótulos de verdade fundamental.

    Retorna:
    List[List[int]]: A matriz de confusão representada como uma lista de listas onde cada lista
                     representa uma linha na matriz.
    """
    ## Isso cria uma matriz quadrada com dimensões iguais ao número de classes, inicializando todos os elementos com zero. Cada linha e coluna corresponde a um rótulo de classe.
    matrix = [[0 for _ in range(len(labels))] for _ in range(len(labels))]

    ## Este loop associa cada previsão com seu rótulo de verdade fundamental correspondente e os processa um por um.
    for pred, truth in zip(preds, ground_truth):
        ## Usa NumPy para encontrar o índice da maior probabilidade na lista de previsão, que corresponde à classe prevista.
        pred_index = np.argmax(pred)
        ## Encontra o índice do rótulo da classe verdadeira na lista `labels`.
        truth_index = labels.index(truth)
        ## Esta linha incrementa a célula na interseção da linha da classe prevista e da coluna da classe verdadeira na matriz de confusão, efetivamente contando a ocorrência deste par específico previsão-verdade.
        matrix[pred_index][truth_index] += 1

    ## Após processar todas as previsões, a função retorna a matriz de confusão calculada.
    return matrix

Na função confusion_matrix, você implementa a lógica para calcular a matriz de confusão para um problema de classificação.

✨ Verificar Solução e Praticar

Testar a Função da Matriz de Confusão

Nesta etapa, você testará a função confusion_matrix usando o exemplo fornecido.

Adicione o seguinte código no arquivo 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)

Execute o arquivo confusion_matrix.py para executar o exemplo:

python confusion_matrix.py

A saída deve ser:

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

Verifique se a saída corresponde à matriz de confusão esperada.

Se a saída não for a esperada, revise a implementação da função confusion_matrix e faça as correções necessárias.

✨ Verificar Solução e Praticar

Resumo

Parabéns! Você concluiu este projeto. Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.