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
- 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 dadossample_y: uma lista de rótulos de amostra a serem transformados
- Inicialize uma lista vazia chamada
train_ypara armazenar os rótulos transformados. - Itere pela lista
sample_y:- Para cada rótulo
y, crie uma nova listatraincom 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
yna listalabelsusando o métodoindex()e defina o elemento correspondente emtraincomo 1. - Anexe a lista
trainà listatrain_y.
- Para cada rótulo
- Após o loop, a lista
train_yconterá os rótulos codificados one-hot para todas as amostras. Retorne esta lista da funçãolabel_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.
- Salve o arquivo
label_process.pye 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.



