Cómo realizar una codificación One-Hot para variables multicategóricas

Contenidos

En este artículo, aprenderemos cómo podemos manejar variables de categorías múltiples utilizando la técnica de ingeniería de funciones One Hot Encoding.

Pero antes de continuar, tengamos una breve discusión sobre la ingeniería de funciones y One Hot Encoding.

Ingeniería de funciones

Entonces, la ingeniería de características es el proceso de extraer características de datos sin procesar utilizando el conocimiento de dominio del problema. Estas funciones se pueden utilizar para mejorar el rendimiento de los algoritmos de aprendizaje automático y, si el rendimiento aumenta, proporcionará la mejor precisión. También podemos decir que la ingeniería de funciones es lo mismo que el aprendizaje automático aplicado. La ingeniería de características es el arte más importante en el aprendizaje automático que crea una gran diferencia entre un buen modelo y un mal modelo. Este es el tercer paso en el ciclo de vida de cualquier proyecto de ciencia de datos.

El concepto de transparencia para los modelos de aprendizaje automático es algo complicado, ya que los diferentes modelos a menudo requieren diferentes enfoques para los diferentes tipos de datos. Tal como:-

  • Datos continuos
  • Características categóricas
  • Valores faltantes
  • Normalización
  • Fechas y hora

Pero aquí solo discutiremos las características categóricas, las características categóricas son aquellas características en las que el tipo de datos es un tipo de objeto. El valor del punto de datos en cualquier característica categórica no está en forma numérica, sino en forma de objeto.

Existen muchas técnicas para manejar las variables categóricas, algunas son:

  • Codificación de etiquetas o codificación ordinal
  • Una codificación en caliente
  • Codificación ficticia
  • Codificación de efectos
  • Codificación binaria
  • Codificación de Basilea
  • Codificación hash
  • Codificación de destino

Entonces, aquí manejamos características categóricas por One Hot Encoding, por lo tanto, en primer lugar, discutiremos One Hot Encoding.

Una codificación en caliente

Sabemos que las variables categóricas contienen los valores de la etiqueta en lugar de valores numéricos. El número de valores posibles se limita a menudo a un conjunto fijo. Las variables categóricas a menudo se denominan nominales. Muchos algoritmos de aprendizaje automático no pueden operar directamente en datos de etiquetas. Requieren que todas las variables de entrada y de salida sean numéricas.

Esto significa que los datos categóricos deben convertirse a una forma numérica. Si la variable categórica es una variable de salida, es posible que también desee volver a convertir las predicciones del modelo en una forma categórica para presentarlas o utilizarlas en alguna aplicación.

por ejemplo los datos sobre género están en forma de ‘masculino’ y ‘mujer’.

Pero si usamos codificación one-hot, codificar y permitir que el modelo asuma un orden natural entre categorías puede resultar en un rendimiento deficiente o resultados inesperados.

La codificación one-hot se puede aplicar a la representación de números enteros. Aquí es donde se elimina la variable codificada como entero y se agrega una nueva variable binaria para cada valor entero único.

Por ejemplo, codificamos la variable de colores,

Color rojo Color azul
01
10
01

Ahora comenzaremos nuestro viaje. En el primer paso, tomamos un conjunto de datos de predicción del precio de la vivienda.

Conjunto de datos

Aquí usaremos el conjunto de datos de house_price que se usa para predecir el precio de la vivienda de acuerdo con el tamaño del área.

Si desea descargar el conjunto de datos de predicción del precio de la vivienda, haga clic en aquí.

Importación de módulos

Ahora, tenemos que importar módulos importantes de Python que se utilizarán para la codificación one-hot

# importing pandas
import pandas as pd
# importing numpy
import numpy as np
# importing OneHotEncoder
from sklearn.preprocessing import OneHotEncoder()

Aquí, utilizamos pandas que se utilizan para el análisis de datos, NumPyused para matrices de n dimensiones, y de sklearn, utilizaremos un codificador en caliente de clase One importante para la codificación categórica.

Ahora tenemos que leer estos datos usando Python.

Leer conjunto de datos

Generalmente, el conjunto de datos está en forma de CSV, y el conjunto de datos que usamos también está en forma de CSV. Para leer el archivo CSV usaremos la función pandas read_csv (). vea abajo:

# reading dataset
df = pd.read_csv('house_price.csv')
df.head()

producción:-

screenshot-2021-05-03-212841-1-3858364

Pero solo tenemos que usar variables categóricas para un codificador activo y solo intentaremos explicar con variables categóricas para una fácil comprensión.

para particionar variables categóricas a partir de datos, tenemos que verificar cuántas características tienen valores categóricos.

Comprobación de valores categóricos

Para verificar los valores usamos la función pandas select_dtypes que se usa para seleccionar los tipos de datos de la variable.

# checking features
cat = df.select_dtypes(include="O").keys()
# display variabels
cat

producción:-

screenshot-2021-05-03-214320-1859834

Ahora tenemos que eliminar esas columnas numéricas del conjunto de datos y usaremos esta variable categórica para nuestro uso. Solo usamos 3-4 columnas categóricas del conjunto de datos para aplicar la codificación one-hot.

Creación de un nuevo marco de datos

Ahora, para usar variables categóricas, crearemos un nuevo marco de datos de columnas categóricas seleccionadas.

# creating new df
# setting columns we use
new_df = pd.read_csv('house_price.csv',usecols=['Neighborhood','Exterior1st','Exterior2nd']) 
new_df.head()

producción:-

screenshot-2021-05-03-214440-7585045

Ahora tenemos que averiguar cuántas categorías únicas están presentes en cada columna categórica.

Encontrar valores únicos

Para encontrar valores únicos usaremos la función pandas unique ().

# unique values in each columns
for x in new_df.columns:
    #prinfting unique values
    print(x ,':', len(new_df[x].unique()))

producción:-

Barrio: 25
Exterior 1er: 15
Exterior 2do: 16

Ahora, usaremos nuestra técnica para aplicar la codificación one-hot en variables de múltiples categorías.

Técnica para variables multicategóricas

La técnica consiste en limitar la codificación one-hot a las 10 etiquetas más frecuentes de la variable. Esto significa que haríamos una variable binaria solo para cada una de las 10 etiquetas más frecuentes, esto equivale a agrupar todas las demás etiquetas en una nueva categoría, que en este caso se eliminará. Así, las 10 nuevas variables ficticias indican si una de las 10 etiquetas más frecuentes está presente es 1 o no entonces 0 para una observación particular.

Variables más frecuentes

Aquí seleccionaremos las 20 variables más frecuentes.

Supongamos que tomamos una variable categórica Vecindario.

# finding the top 20 categories
new_df.Neighborhood.value_counts().sort_values(ascending=False).head(20)

producción:

screenshot-2021-05-03-220947-7634589

Cuando vea en esta imagen de salida, notará que el Nombres La etiqueta se repite 225 veces en las columnas de Barrio y bajamos este número es decreciente.

Así que tomamos los 10 resultados principales de la parte superior y convertimos este resultado superior 10 en codificación one-hot y las etiquetas de la izquierda se convierten en cero.

producción:-

screenshot-2021-05-03-223131-9993341

Lista de variables categóricas más frecuentes

# make list with top 10 variables
top_10 = [x for x in new_df.Neighborhood.value_counts().sort_values(ascending=False).head(10).index]
top_10

producción:-

[‘NAmes’,
‘CollgCr’,
‘OldTown’,
‘Edwards’,
‘Somerst’,
‘Gilbert’,
‘NridgHt’,
‘Sawyer’,
‘NWAmes’,
‘SawyerW’]

Hay las 10 etiquetas categóricas principales en la columna Vecindad.

Hacer binario

Ahora, tenemos que hacer las 10 variables binarias de las etiquetas top_10:

# hacer binario de etiquetas

para etiqueta en top_10:

new_df[label] = np.where (new_df[‘Neighborhood’]== etiqueta, 1,0)

new_df[[‘Neighborhood’]+ top_10]

producción:-

NombresCollgCrPueblo ViejoEdwardsSomerstGilbertNridgHtAserradorNWAmesSawyerW
0CollgCr0100000000
1Veenker0000000000
2CollgCr0100000000
3Crawfor0000000000
4NoRidge0000000000
5Mitchel0000000000
6Somerst0000100000
7NWAmes0000000010
8Pueblo Viejo0010000000
9BrkSide0000000000
10Aserrador0000000100
11NridgHt0000001000

Puede ver cómo las etiquetas top_10 ahora se convierten a formato binario.

Tomemos un ejemplo, vea en la tabla donde 1 índice Veenker que no pertenecía a nuestra etiqueta top_10 categorías, por lo que resultará en 0 todas las columnas.

Ahora lo haremos para todas las variables categóricas que hemos seleccionado anteriormente.

Todas las variables seleccionadas en OneHotEncoding

# for all categorical variables we selected
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 the data again
data = pd.read_csv('D://xdatasets/train.csv',usecols = ['Neighborhood','Exterior1st','Exterior2nd'])
#encode Nighborhood into the 10 most frequent categories
top_x(data,'Neighborhood',top_10)
# display data
data.head()

Producción:-

screenshot-2021-05-03-225312-4-1118700

Ahora, aquí aplicamos la codificación one-hot en todas las variables de categorías múltiples.

Ahora veremos las ventajas y desventajas de One Hot Encoding para múltiples variables.

Ventajas

  • Fácil de implementar
  • No requiere mucho tiempo para la exploración de variables.
  • No expande masivamente el espacio de características.

Desventajas

  • No agrega ninguna información que pueda hacer que la variable sea más predictiva
  • No guarde la información de las variables ignoradas.

Notas finales

Entonces, el resumen de esto es que aprendemos cómo manejar variables de múltiples categorías. Si se encuentra con este problema, entonces esta es una tarea muy difícil. Así que gracias por leer este artículo.

Conéctate conmigo en Linkedin: Perfil

Lea mis otros artículos: https://www.analyticsvidhya.com/blog/author/mayurbadole2407/

Gracias😎

Los medios que se muestran en este artículo no son propiedad de DataPeaker y se utilizan a discreción del autor.

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.