1
resposta

Vetorização e OneHotEncoder

Percebi que a função get dummy faz a criação de várias colunas, mas já vi um outro método de vetorização que era mais optimizado. no caso do get_dummies a tabela fica da seguinte forma

indexabc
1100
2010
3001

Só que com poderíamos usar representar essas 3 variáveis com somente 2 colunas.

varcol1col2
a10
b01
c00

inclusive poderiamos ter até mais uma variável

varcol1col2
a10
b01
c00
d11

existe algum processo que faça essa segunda mudança?

1 resposta

Sim, o método mais otimizado que você mencionou é geralmente chamado de "Binary Encoding" ou "Binary Vectorization". Este método representa categorias usando números binários e, portanto, reduz o número de colunas necessárias para representar as variáveis categóricas.

Uma biblioteca popular para realizar esse tipo de vetorização é a Category Encoders. No entanto, vou mostrar como você pode fazer isso usando o pacote pandas. A ideia é converter cada categoria em seu equivalente binário e, em seguida, usar cada dígito binário como uma coluna separada.

Aqui está um exemplo de como fazer isso:

import pandas as pd

# Seu DataFrame original com variáveis categóricas
df = pd.DataFrame({'var': ['a', 'b', 'c', 'd']})

# Aplica a codificação binária
binary_encoded = pd.get_dummies(df['var'].apply(lambda x: list(bin(ord(x))[2:].zfill(8))))

# Renomeia as colunas para col1, col2, col3, ...
binary_encoded.columns = [f'col{i+1}' for i in range(binary_encoded.shape[1])]

# Concatena os DataFrames
result_df = pd.concat([df, binary_encoded], axis=1)

print(result_df)

No exemplo acima, a função lambda é aplicada a cada elemento da coluna 'var', convertendo a letra para sua representação binária (ordem ASCII) e preenchendo com zeros à esquerda para garantir que cada representação tenha o mesmo comprimento. O pd.get_dummies é então aplicado a essa nova representação, criando as colunas binárias. O resultado é um DataFrame com as colunas originais e as colunas binárias.

Lembre-se de que esse método pode não ser adequado para todas as situações, e a escolha entre get_dummies e a codificação binária depende do contexto específico do seu conjunto de dados e do objetivo da análise.