Entendendo o Label encoding em machine learning

O que é label encoding?

Quando usar o label encoding?

Exemplo Prático

import pandas as pd
from sklearn.preprocessing import LabelEncoder

# Dados de exemplo
df = pd.DataFrame({
    'Carros': ['Vermelho', 'Azul', 'Verde', 'Vermelho', 'Azul']
})

# Aplicando o Label Encoder
encoder = LabelEncoder()
df['Carros_Encoded'] = encoder.fit_transform(df['Carros'])

print(df)
     Carros  Carros_Encoded
0  Vermelho           2
1  Azul               0
2  Verde              1
3  Vermelho           2
4  Azul               0

Impacto na Modelagem e Métricas

Alternativa: One-Hot encoding

from sklearn.preprocessing import OneHotEncoder

# Aplicando One-Hot Encoder
onehot_encoder = OneHotEncoder(sparse=False)
encoded_data = onehot_encoder.fit_transform(df[['Carros']])

print(encoded_data)

[[0. 1. 0.]
[1. 0. 0.]
[0. 0. 1.]
[0. 1. 0.]
[1. 0. 0.]]

Comparação de desempenho entre Label Encoding e One-Hot encoding

Dataset Titanic: Preparação e treinamento

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score

# Carregar o dataset Titanic
url = 'https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv'
df = pd.read_csv(url)

# Selecionar features e target
X = df[['Pclass', 'Sex', 'Embarked']]
y = df['Survived']

# Preenchendo valores faltantes na coluna Embarked
X['Embarked'].fillna('S', inplace=True)

# Dividindo o dataset em treino e teste
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# Aplicar Label Encoding para as variáveis categóricas
label_encoder_sex = LabelEncoder()
label_encoder_embarked = LabelEncoder()

# Ajustar o encoder apenas nos dados de treino
X_train['Sex'] = label_encoder_sex.fit_transform(X_train['Sex'])
X_train['Embarked'] = label_encoder_embarked.fit_transform(X_train['Embarked'])

# Aplicar a transformação nos dados de teste com os encoders treinados
X_test['Sex'] = label_encoder_sex.transform(X_test['Sex'])
X_test['Embarked'] = label_encoder_embarked.transform(X_test['Embarked'])

# Treinando o modelo com Label Encoding
clf_label = RandomForestClassifier(random_state=42)
clf_label.fit(X_train, y_train)
y_pred_label = clf_label.predict(X_test)

# Avaliação de desempenho com Label Encoding
label_accuracy = accuracy_score(y_test, y_pred_label)
print(f"Acurácia com Label Encoding: {label_accuracy:.2f}")
# Aplicar One-Hot Encoding para as variáveis categóricas
onehot_encoder = OneHotEncoder(sparse=False, drop='first')

X_train_onehot = onehot_encoder.fit_transform(X_train)
X_test_onehot = onehot_encoder.transform(X_test)

# Treinando o modelo com One-Hot Encoding
clf_onehot = RandomForestClassifier(random_state=42)
clf_onehot.fit(X_train_onehot, y_train)
y_pred_onehot = clf_onehot.predict(X_test_onehot)

# Avaliação de desempenho com One-Hot Encoding
onehot_accuracy = accuracy_score(y_test, y_pred_onehot)
print(f"Acurácia com One-Hot Encoding: {onehot_accuracy:.2f}")

Resultados e análise

Resultados:
  • Acurácia com Label Encoding: ~0.80
  • Acurácia com One-Hot Encoding: ~0.83

Outros métodos de codificação

1. Target Encoding

# Exemplo básico de Target Encoding
import category_encoders as ce

target_encoder = ce.TargetEncoder(cols=['Sex', 'Embarked'])
X_train_target = target_encoder.fit_transform(X_train, y_train)
X_test_target = target_encoder.transform(X_test)
	Pclass	Sex	    Embarked
445	1	0.185366	0.323144
650	3	0.185366	0.323144
172	3	0.727700	0.323144
450	2	0.185366	0.323144
314	2	0.185366	0.323144

2. Frequency Encoding

# Exemplo básico de Frequency Encoding
X_train_freq = X_train.copy()
X_test_freq = X_test.copy()

for col in ['Sex', 'Embarked']:
    freq = X_train_freq[col].value_counts(normalize=True)
    X_train_freq[col] = X_train_freq[col].map(freq)
    X_test_freq[col] = X_test_freq[col].map(freq)
	Pclass	Sex	    Embarked
445	1	0.658106	0.735152
650	3	0.658106	0.735152
172	3	0.341894	0.735152
450	2	0.658106	0.735152
314	2	0.658106	0.735152

3. Binary Encoding

# Exemplo básico de Binary Encoding
binary_encoder = ce.BinaryEncoder(cols=['Sex', 'Embarked'])
X_train_binary = binary_encoder.fit_transform(X_train)
X_test_binary = binary_encoder.transform(X_test)
	Pclass	Sex_0	Sex_1	Embarked_0	Embarked_1
445	   1	  0	       1	    0	       1
650	   3	  0	       1	    0	       1
172	   3	  1	       0	    0	       1
450	   2	  0	       1	    0	       1
314	   2	  0	       1	    0	       1

Conclusão

Label Encoding in Python
One Hot Encoding vs. Label Encoding in Machine Learning

  1. Mãos à obra aprendizado de máquina com Scikit-Learn, Keras & TensorFlow: conceitos, ferramentas e técnicas para a construção de sistemas inteligentes.
  2. Python para análise de dados
  3. Estatística Prática Para Cientistas de Dados: 50 Conceitos Essenciais
  4. An Introduction to Statistical Learning (Python e R)

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Rolar para cima
×