Codificação de Rótulos para One-Hot

PythonBeginner
Pratique Agora

Introdução

Neste projeto, você aprenderá como realizar a codificação one-hot (one-hot encoding) em dados de rótulos para uma tarefa de classificação de rótulo único (single-label classification). A codificação one-hot é uma técnica comum usada para transformar variáveis categóricas em um formato que pode ser utilizado por algoritmos de aprendizado de máquina.

🎯 Tarefas

Neste projeto, você aprenderá:

  • Como entender o conceito de codificação one-hot e sua importância no aprendizado de máquina.
  • Como implementar uma função para realizar a codificação one-hot em uma lista de rótulos de amostra.
  • Como testar a função de codificação de rótulos com dados de amostra.

🏆 Conquistas

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

  • Transformar rótulos categóricos em um formato numérico adequado para modelos de aprendizado de máquina.
  • Entender a importância do pré-processamento de dados e da engenharia de atributos (feature engineering) no pipeline de aprendizado de máquina.
  • Demonstrar habilidades práticas de codificação em Python para manipular e transformar dados para tarefas de aprendizado de máquina.

Codificação de Rótulos para One-Hot

Nesta etapa, você aprenderá como realizar a codificação one-hot (one-hot encoding) em dados de rótulos para uma tarefa de classificação de rótulo único (single-label classification).

A codificação one-hot é uma técnica comum usada para transformar variáveis categóricas em um formato que pode ser utilizado por algoritmos de aprendizado de máquina. No caso da classificação de rótulo único, cada rótulo único no conjunto de dados é representado como um vetor binário, onde a posição do rótulo na lista é marcada como 1 e todas as outras posições são 0.

Abra o arquivo label_process.py localizado no diretório /home/labex/project e adicione o seguinte código:

def label_process(labels: List[str], sample_y: List[str]) -> List[List[int]]:
    """
    Transforms a list of sample labels into a format suitable for classification tasks.

    The function creates a binary list for each sample label, where the position
    of the label in the 'labels' list is marked as 1 and all other positions are 0.
    This is known as one-hot encoding.

    Args:
        labels (List[str]): List of unique labels/classes in the dataset.
        sample_y (List[str]): List of sample labels to be transformed.

    Returns:
        List[List[int]]: Transformed labels, each represented as a binary list corresponding
        to the positions in the 'labels' list.
    """
    train_y = []
    for y in sample_y:
        train = [0] * len(labels)
        train[labels.index(y)] = 1
        train_y.append(train)
    return train_y
  1. Na função label_process, implementamos a lógica de codificação one-hot. A função recebe dois argumentos:
    • labels: uma lista de rótulos/classes únicos no conjunto de dados
    • sample_y: uma lista de rótulos de amostra a serem transformados
  2. Inicialize uma lista vazia chamada train_y para armazenar os rótulos transformados.
  3. Itere pela lista sample_y:
    • Para cada rótulo y, crie uma nova lista train com o comprimento igual ao número de rótulos únicos (len(labels)) e inicialize todos os elementos com 0.
    • Encontre o índice do rótulo atual y na lista labels usando o método index() e defina o elemento correspondente em train como 1.
    • Anexe a lista train à lista train_y.
  4. Após o loop, a lista train_y conterá os rótulos codificados one-hot para todas as amostras. Retorne esta lista da função label_process.

Testando a Codificação de Rótulos

Nesta etapa, você testará a função label_process fornecendo alguns dados de amostra e verificando a saída.

Adicione o seguinte código no arquivo label_process.py:

## Continue in the same file
if __name__ == "__main__":
    labels = ["Python", "Java", "Tensorflow", "Springboot", "Keras"]
    sample_y = ["Python", "Python", "Python", "Java", "Java", "Keras"]
    train_y = label_process(labels, sample_y)
    print(train_y)

Este código define uma lista de rótulos únicos (labels) e uma lista de rótulos de amostra (sample_y), em seguida, chama a função label_process e imprime os rótulos codificados one-hot resultantes.

  1. Salve o arquivo label_process.py e execute o script a partir do terminal:
python label_process.py

A saída deve ser:

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

Esta saída mostra os rótulos codificados one-hot para os dados de amostra. Cada linha representa uma amostra, e as colunas correspondem às posições dos rótulos na lista labels.

Parabéns! Você implementou com sucesso a codificação one-hot de rótulos para uma tarefa de classificação de rótulo único.

Resumo

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

✨ Verificar Solução e Praticar✨ Verificar Solução e Praticar