Como realizar a codificação One-Hot para variáveis ​​multicategóricas

Nó Fonte: 841101

Neste artigo, aprenderemos como podemos lidar com variáveis ​​​​multicategóricas usando a técnica de engenharia de recursos One Hot Encoding.

Mas antes de prosseguir, vamos fazer uma breve discussão sobre engenharia de recursos e One Hot Encoding.

Engenharia de recursos

Portanto, Feature Engineering é o processo de extração de recursos de dados brutos usando o conhecimento de domínio do problema. Esses recursos podem ser usados ​​para melhorar o desempenho dos algoritmos de aprendizado de máquina e, se o desempenho aumentar, proporcionará a melhor precisão. Também podemos dizer que engenharia de recursos é o mesmo que aprendizado de máquina aplicado. A engenharia de recursos é a arte mais importante no aprendizado de máquina, que cria uma enorme diferença entre um modelo bom e um modelo ruim. Esta é a terceira etapa no ciclo de vida de qualquer projeto de ciência de dados.

O conceito de transparência para os modelos de aprendizado de máquina é complicado, pois modelos diferentes geralmente exigem abordagens diferentes para os diferentes tipos de dados. Como:-

  • Dados contínuos
  • Características categóricas
  • Valores faltantes
  • Normalização
  • Datas e hora

Mas aqui discutiremos apenas recursos categóricos. Os recursos categóricos são aqueles recursos nos quais o tipo de dados é um tipo de objeto. O valor do ponto de dados em qualquer característica categórica não está na forma numérica, mas sim na forma de objeto.

Existem muitas técnicas para lidar com variáveis ​​​​categóricas, algumas são:

  • Codificação de rótulo ou codificação ordinal
  • Uma codificação quente
  • Codificação fictícia
  • Codificação de Efeito
  • Codificação Binária
  • Codificação Basileia
  • Codificação hash
  • Codificação de destino

Portanto, aqui tratamos de recursos categóricos por One Hot Encoding, portanto, em primeiro lugar, discutiremos One Hot Encoding.

Uma codificação a quente

Sabemos que as variáveis ​​​​categóricas contêm os valores do rótulo em vez de valores numéricos. O número de valores possíveis é frequentemente limitado a um conjunto fixo. Variáveis ​​categóricas são freqüentemente chamadas de nominais. Muitos algoritmos de aprendizado de máquina não podem operar diretamente nos dados do rótulo. Eles exigem que todas as variáveis ​​de entrada e de saída sejam numéricas.

Isso significa que os dados categóricos devem ser convertidos para uma forma numérica. Se a variável categórica for uma variável de saída, você também poderá converter as previsões do modelo novamente em um formato categórico para apresentá-las ou usá-las em algum aplicativo.

por exemplo dados sobre gênero estão na forma de 'macho' e 'fêmea'.

Mas se usarmos a codificação one-hot, codificar e permitir que o modelo assuma uma ordem natural entre categorias pode resultar em desempenho ruim ou resultados inesperados.

A codificação one-hot pode ser aplicada à representação inteira. É aqui que a variável codificada por inteiro é removida e uma nova variável binária é adicionada para cada valor inteiro exclusivo.

Por exemplo, codificamos variáveis ​​de cores,

Cor vermelha  Cor azul
0 1
1 0
0 1

Agora começaremos nossa jornada. Na primeira etapa, pegamos um conjunto de dados de previsão de preços de imóveis.

Conjunto de dados

Aqui usaremos o conjunto de dados house_price que é usado para prever o preço da casa de acordo com o tamanho da área.

Se você deseja baixar o conjunto de dados de previsão de preços de casas, clique em SUA PARTICIPAÇÃO FAZ A DIFERENÇA.

Importando Módulos

Agora, temos que importar módulos importantes do python que serão usados ​​para a codificação one-hot

# importando pandas import pandas as pd # importando numpy import numpy as np # importando OneHotEncoder de sklearn.preprocessing import OneHotEncoder()

Aqui, usamos pandas que são usados ​​para análise de dados, NumPy usado para arrays n-dimensionais, e do sklearn, usaremos uma classe importante One Hot Encoder para codificação categórica.

Agora temos que ler esses dados usando Python.

Lendo conjunto de dados

Geralmente, o conjunto de dados está no formato CSV e o conjunto de dados que usamos também está no formato CSV. Para ler o arquivo CSV usaremos a função pandas read_csv(). Veja abaixo:

# lendo o conjunto de dados df = pd.read_csv('house_price.csv') df.head()

saída:-

Mas só temos que usar variáveis ​​categóricas para um codificador ativo e só tentaremos explicar com variáveis ​​categóricas para facilitar o entendimento.

para particionar variáveis ​​​​categóricas dos dados, temos que verificar quantos recursos possuem valores categóricos.

Verificando valores categóricos

Para verificar valores usamos a função pandas select_dtypes que é usada para selecionar os tipos de dados da variável.

# verificando recursos cat = df.select_dtypes(include='O').keys() # exibe variáveis ​​​​cat

saída:-

 

Agora temos que eliminar essas colunas numéricas do conjunto de dados e usaremos esta variável categórica para nosso uso. Usamos apenas 3-4 colunas categóricas do conjunto de dados para aplicar a codificação one-hot.

Criando novo DataFrame

Agora, para usar variáveis ​​​​categóricas, criaremos um novo dataframe de colunas categóricas selecionadas.

# criando novo df # configurando colunas que usamos new_df = pd.read_csv('house_price.csv',usecols=['Vizinhança','Exterior1º','Exterior2º']) new_df.head()

saída:-

Agora temos que descobrir quantas categorias exclusivas estão presentes em cada coluna categórica.

Encontrando Valores Únicos

Para encontrar valores únicos, usaremos a função pandas unique().

# valores únicos em cada coluna para x em new_df.columns: #prinfting valores únicos print(x ,':', len(new_df[x].unique()))

saída:-

Bairro : 25
Exterior1º: 15
Exterior2: 16

Agora, seguiremos nossa técnica para aplicar codificação one-hot em variáveis ​​​​multicategóricas.

Técnica para variáveis ​​multicategóricas

A técnica é limitar a codificação one-hot aos 10 rótulos mais frequentes da variável. Isso significa que faríamos uma variável binária apenas para cada um dos 10 rótulos mais frequentes, o que equivale a agrupar todos os outros rótulos em uma nova categoria, que neste caso será descartada. Assim, as 10 novas variáveis ​​dummies indicam se um dos 10 rótulos mais frequentes está presente é 1 ou não então 0 para uma observação específica.

Variáveis ​​mais frequentes

Aqui selecionaremos as 20 variáveis ​​mais frequentes.

Suponha que tomemos uma variável categórica Área Ex: "Parque das Nações".

# encontrando as 20 principais categorias new_df.Neighborhood.value_counts().sort_values(ascending=False).head(20)

saída:

Ao ver esta imagem de saída, você notará que o Nomes o rótulo está se repetindo 225 vezes nas colunas Vizinhança e ao descermos esse número está diminuindo.

Então pegamos os 10 principais resultados do topo e convertemos esses 10 resultados principais em codificação one-hot e os rótulos à esquerda se transformam em zero.

saída:-

 

Lista das variáveis ​​categóricas mais frequentes

# faça uma lista com as 10 principais variáveis ​​top_10 = [x for x in new_df.Neighborhood.value_counts().sort_values(ascending=False).head(10).index] top_10

saída:-

['Nomes',
'CollgCr',
'Cidade antiga',
'Eduardo',
'Somers',
'Gilberto',
'Nridght',
'Serrador',
'NWAmes',
'SawyerW']

Existem os 10 principais rótulos categóricos na coluna Vizinhança.

Tornar binário

Agora, temos que fazer as 10 variáveis ​​binárias dos rótulos top_10:

#faz binário de rótulos

para rótulo em top_10:

novo_df = np.where(new_df['Bairro']==rótulo,1,0)

new_df[['Bairro']+top_10]


saída:-

Nomes ColgCr Cidade antiga Edwards Somerst Gilbert NridgHt serrador NWAmes Sawyer W
0 ColgCr 0 1 0 0 0 0 0 0 0 0
1 Veenker 0 0 0 0 0 0 0 0 0 0
2 ColgCr 0 1 0 0 0 0 0 0 0 0
3 Crawfor 0 0 0 0 0 0 0 0 0 0
4 NoRidge 0 0 0 0 0 0 0 0 0 0
5 Michael 0 0 0 0 0 0 0 0 0 0
6 Somerst 0 0 0 0 1 0 0 0 0 0
7 NWAmes 0 0 0 0 0 0 0 0 1 0
8 Cidade antiga 0 0 1 0 0 0 0 0 0 0
9 BrkSide 0 0 0 0 0 0 0 0 0 0
10 serrador 0 0 0 0 0 0 0 1 0 0
11 NridgHt 0 0 0 0 0 0 1 0 0 0

Você pode ver como os rótulos top_10 agora são convertidos em formato binário.

Vamos dar um exemplo, veja na tabela onde 1 índice Veenker que não pertencia ao nosso rótulo de categorias top_10, portanto resultará em 0 todas as colunas.

Agora faremos isso para todas as variáveis ​​categóricas que selecionamos acima.

Todas as variáveis ​​selecionadas no OneHotEncoding

# para todas as variáveis ​​​​categóricas selecionamos def top_x(df2,variable,top_x_labels): for label in top_x_labels: df2[variable+'_'+label] = np.where(data[variable]==label,1,0) # read os dados novamente data = pd.read_csv('D://xdatasets/train.csv',usecols = ['Neighborhood','Exterior1st','Exterior2nd']) #encode Nighborhood nas 10 categorias mais frequentes top_x(data, 'Neighbourhood',top_10) # exibe dados data.head()

Resultado:-

Agora, aqui aplicamos a codificação one-hot em todas as variáveis ​​multicategóricas.

Agora veremos as vantagens e desvantagens do One Hot Encoding para múltiplas variáveis.

Vantagens

  • Simples de implementar
  • Não requer muito tempo para exploração variável
  • Não expande enormemente o espaço de recursos.

Desvantagens

  • Não adiciona nenhuma informação que possa tornar a variável mais preditiva
  • Não guarde as informações das variáveis ​​ignoradas.

Notas finais

Então, o resumo disso é que aprendemos como lidar com variáveis ​​multicategóricas. Se você se deparar com esse problema, então esta é uma tarefa muito difícil. Então, obrigado por ler este artigo.

Conecte-se comigo no Linkedin: Perfil

Leia meus outros artigos: https://www.analyticsvidhya.com/blog/author/mayurbadole2407/

Obrigado😎

As mídias mostradas neste artigo não são propriedade da Analytics Vidhya e são usadas a critério do autor.

Você também pode ler este artigo em nosso aplicativo móvel Obtenha-a em Google Play

Artigos Relacionados

Fonte: https://www.analyticsvidhya.com/blog/2021/05/how-to-perform-one-hot-encoding-for-multi-categorical-variables/

Carimbo de hora:

Mais de Análise Vidhya