La mayoría de los conjuntos de datos de la vida real que encontramos durante el desarrollo de nuestro proyecto de ciencia de datos tienen columnas de tipos de datos mixtos. Estos conjuntos de datos constan de categórico así como columnas numéricas. Sin embargo, varios modelos de aprendizaje automático no funcionan con datos categóricos y, para ajustar estos datos al modelo de aprendizaje automático, es necesario convertirlos en datos numéricos. Por ejemplo, supongamos que un conjunto de datos tiene un Género columna con elementos categóricos como masculino y Femenino . Estas etiquetas no tienen un orden de preferencia específico y, además, dado que los datos son etiquetas de cadenas, los modelos de aprendizaje automático malinterpretaron que existe algún tipo de jerarquía en ellas.
Un enfoque para resolver este problema puede ser la codificación de etiquetas, donde asignaremos un valor numérico a estas etiquetas, por ejemplo. Masculino y Femenino asignada a 0 y 1 . Pero esto puede agregar sesgo a nuestro modelo, ya que comenzará a dar mayor preferencia a la Femenino parámetro como 1>0 pero idealmente, ambas etiquetas son igualmente importantes en el conjunto de datos. Para solucionar este problema utilizaremos la técnica One Hot Encoding.
Una codificación en caliente
Una codificación activa es una técnica que utilizamos para representar variables categóricas como valores numéricos en un modelo de aprendizaje automático.
Las ventajas de utilizar una codificación activa incluyen:
- Permite el uso de variables categóricas en modelos que requieren entrada numérica.
- Puede mejorar el rendimiento del modelo proporcionando más información al modelo sobre la variable categórica.
- Puede ayudar a evitar el problema de la ordinalidad, que puede ocurrir cuando una variable categórica tiene un orden natural (por ejemplo, pequeña, mediana, grande).
Las desventajas de utilizar una codificación activa incluyen:
- Puede dar lugar a una mayor dimensionalidad, ya que se crea una columna independiente para cada categoría de la variable. Esto puede hacer que el modelo sea más complejo y lento de entrenar.
- Puede generar datos escasos, ya que la mayoría de las observaciones tendrán un valor de 0 en la mayoría de las columnas codificadas en caliente.
- Puede conducir a un sobreajuste, especialmente si hay muchas categorías en la variable y el tamaño de la muestra es relativamente pequeño.
- La codificación one-hot es una técnica poderosa para tratar datos categóricos, pero puede provocar una mayor dimensionalidad, escasez y sobreajuste. Es importante utilizarlo con cautela y considerar otros métodos, como la codificación ordinal o la codificación binaria.
Uno de los ejemplos de codificación en caliente
En Una codificación en caliente , los parámetros categóricos prepararán columnas separadas para las etiquetas Masculino y Femenino. Entonces, siempre que haya un Hombre, el valor será 1 en la columna Hombre y 0 en la columna Mujer, y viceversa. Entendámoslo con un ejemplo: considere los datos donde se dan las frutas, sus valores categóricos correspondientes y sus precios.
| Fruta | Valor categórico de la fruta. | Precio |
|---|---|---|
| manzana | 1 | 5 |
| mango | 2 | 10 |
| manzana | 1 | 15 |
| naranja | 3 | 20 |
El resultado después de aplicar la codificación one-hot a los datos se proporciona de la siguiente manera:
| manzana | mango | naranja | precio |
|---|---|---|---|
| 1 | 0 | 0 | 5 |
| 0 | 1 | 0 | 10 |
| 1 | 0 | 0 | 15 |
| 0 | 0 | 1 | 20 |
Codificación One-Hot usando Python
Creando marco de datos
Crear un marco de datos para implementar una codificación activa desde un archivo CSV.
15 de 100.00Python3
# Program for demonstration of one hot encoding # import libraries import numpy as np import pandas as pd # import the data required data = pd.read_csv('employee_data.csv') print(data.head())> Producción:

Primeras cinco filas de Dataframe
Elementos únicos en columna categórica
podemos usar el único() función de la pandas biblioteca para obtener elementos únicos de la columna del marco de datos.
Python3 print(data['Gender'].unique()) print(data['Remarks'].unique())>
Producción:
array(['Male', 'Female'], dtype=object) array(['Nice', 'Good', 'Great'], dtype=object)>
Recuento de elementos en la columna
Nosotros podemos usar valor_cuenta() función de pandas para obtener los recuentos de cada elemento en el marco de datos.
Python3 data['Gender'].value_counts() data['Remarks'].value_counts()>
Producción:
Female 7 Male 5 Name: Gender, dtype: int64 Nice 5 Great 4 Good 3 Name: Remarks, dtype: int64>
Tenemos dos métodos disponibles para realizar la codificación one-hot en la columna categórica.
Codificación One-Hot de columna categórica usando la biblioteca Pandas
Nosotros podemos usar pd.get_dummies() función de pandas para codificar one-hot las columnas categóricas. Esta función
Python3 one_hot_encoded_data = pd.get_dummies(data, columns = ['Remarks', 'Gender']) print(one_hot_encoded_data)>
Producción:

Columnas codificadas One-Hot del conjunto de datos
Podemos observar que tenemos 3 comentarios y 2 género columnas en los datos. Sin embargo, puedes usar n-1 columnas para definir parámetros si tiene norte etiquetas únicas. Por ejemplo, si sólo mantenemos el Género femenino columna y suelte el Género masculino columna, entonces también podemos transmitir toda la información, ya que cuando la etiqueta es 1, significa mujer y cuando la etiqueta es 0 significa hombre. De esta manera podemos codificar los datos categóricos y reducir también la cantidad de parámetros.
One Hot Encoding usando la biblioteca de aprendizaje Sci-kit
Scikit-learn (sklearn) es una biblioteca popular de aprendizaje automático en Python que proporciona numerosas herramientas para el preprocesamiento de datos. Proporciona un OneHotEncoder Función que utilizamos para codificar variables categóricas y numéricas en vectores binarios.
Python3 #one hot encoding using OneHotEncoder of Scikit-Learn import pandas as pd from sklearn.preprocessing import OneHotEncoder #Building a dummy employee dataset for example data = {'Employee id': [10, 20, 15, 25, 30], 'Gender': ['M', 'F', 'F', 'M', 'F'], 'Remarks': ['Good', 'Nice', 'Good', 'Great', 'Nice'], } #Converting into a Pandas dataframe df = pd.DataFrame(data) #Print the dataframe: print(f'Employee data :
{df}') #Extract categorical columns from the dataframe #Here we extract the columns with object datatype as they are the categorical columns categorical_columns = df.select_dtypes(include=['object']).columns.tolist() #Initialize OneHotEncoder encoder = OneHotEncoder(sparse_output=False) # Apply one-hot encoding to the categorical columns one_hot_encoded = encoder.fit_transform(df[categorical_columns]) #Create a DataFrame with the one-hot encoded columns #We use get_feature_names_out() to get the column names for the encoded data one_hot_df = pd.DataFrame(one_hot_encoded, columns=encoder.get_feature_names_out(categorical_columns)) # Concatenate the one-hot encoded dataframe with the original dataframe df_encoded = pd.concat([df, one_hot_df], axis=1) # Drop the original categorical columns df_encoded = df_encoded.drop(categorical_columns, axis=1) # Display the resulting dataframe print(f'Encoded Employee data :
{df_encoded}')> Producción
Employee data : Employee id Gender Remarks 0 10 M Good 1 20 F Nice 2 15 F Good 3 25 M Great 4 30 F Nice Encoded Employee data : Employee id Gender_F Gender_M Remarks_Good Remarks_Great Remarks_Nice 0 10 0.0 1.0 1.0 0.0 0.0 1 20 1.0 0.0 0.0 0.0 1.0 2 15 1.0 0.0 1.0 0.0 0.0 3 25 0.0 1.0 0.0 1.0 0.0 4 30 1.0 0.0 0.0 0.0 1.0>