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
Artigos Relacionados
- '
- algoritmos
- Todos os Produtos
- Permitindo
- análise
- analítica
- app
- Apple
- Aplicação
- ÁREA
- Arte
- artigo
- artigos
- MELHOR
- a verificação
- Coluna
- Criar
- dados,
- análise de dados
- ciência de dados
- Cair
- desistiu
- Engenharia
- Evento
- Expandir
- Característica
- Funcionalidades
- Primeiro nome
- formulário
- formato
- função
- Gênero
- Bom estado, com sinais de uso
- Google Play
- Manipulação
- SUA PARTICIPAÇÃO FAZ A DIFERENÇA
- House
- Como funciona o dobrador de carta de canal
- Como Negociar
- HTTPS
- enorme
- imagem
- importador
- Crescimento
- índice
- INFORMAÇÕES
- IT
- Conhecimento
- Rótulos
- APRENDER
- aprendizagem
- Limitado
- Lista
- aprendizado de máquina
- Mídia
- Móvel Esteira
- Aplicativo móvel
- modelo
- Outros
- atuação
- pobre
- predição
- Previsões
- presente
- preço
- Previsão de preço
- projeto
- Python
- Cru
- dados não tratados
- Leitura
- Resultados
- Ciência
- selecionado
- conjunto
- contexto
- Tamanho
- So
- Espaço
- começo
- tempo
- topo
- Transparência
- us
- valor
- X
- zero