La mayoría de los algoritmos de aprendizaje automático solamente pueden trabajar con datos numéricos. Pero, en muchas ocasiones, lo que se tienen son datos de tipo categórico. Debido a que los algoritmos no pueden realizar las operaciones matemáticas sobre estos, es necesario transformarlos antes de poder emplearlos en el entrenamiento de cualquier modelo de aprendizaje automático. Algo que se puede conseguir mediante la creación de variables dummies o variables binarias. El método más habitual para la creación de variables dummies es convertir cada una de las categorías de la variable original en una nueva columna binaria, si la fila corresponde con la categoría ésta tendrá como valor 1, en cualquier otro caso tendrá 0. Veamos cómo se pueden crear las variables dummies con Pandas mediante la función get_dummies()
.
Conjunto de datos de ejemplo
Supongamos que contamos con un conjunto de datos en el que se tiene el precio de un producto y su color. Por ejemplo, el conjunto que se muestra a continuación
import pandas as pd data = pd.DataFrame({ 'precio': [45, 53, 60, 42, 34], 'color': ['rojo', 'verde', 'azul', 'verde', 'rojo'] }) data
precio color 0 45 rojo 1 53 verde 2 60 azul 3 42 verde 4 34 rojo
Ahora, si se desea crear un modelo de regresión lineal para obtener el precio del producto no se puede usar el color directamente. Al ser una variable categórica no se puede multiplicar por un parámetro para predecir un valor. Pero sí que es posible si el dato se representa como variables dummies que representa si el registro es de un color u otro.
La función get_dummies()
de Pandas
Pandas dispone de la función get_dummies()
con la cual se puede crear de un forma sencilla variables dummies a partir de un DataFrame. El uso básico de esta función solamente requiere llamarla con un conjunto de datos como parámetro, obteniendo como resultado un DataFrame con los datos transformados. Lo que se puede hacer con el conjunto de datos de ejemplo.
dummies = pd.get_dummies(data) dummies
precio color_azul color_rojo color_verde 0 45 0 1 0 1 53 0 0 1 2 60 1 0 0 3 42 0 0 1 4 34 0 1 0
Como se puede ver en los resultados se crea un nuevo conjunto de datos con tres variables en que comienzan por el nombre de la variable anterior, seguido de guión bajo y el nombre de la categoría. Así en este ejemplo se tienen tres variables, una para cada uno de los colores. Además, no es necesario indicar las variables que son categóricas, ya que el algoritmo las detecta automáticamente, dejando las numéricas intactas.
Eliminación de la primera categoría con drop_first
Los conjuntos de datos con colinealidad suelen dar problemas en la mayoría de algoritmos de aprendizaje automático. Por construcción, las variables dummies son colineales. Algo que se puede comprobar fácilmente, cualquier de las nuevas variables se puede predecir a partir del resto ya que es 1 cuando el resto es 0 y 0 cuando hay un 1 en cualquier otra variable. Para solucionar este problema se puede eliminar una variable o asignar el valor verdadero a la propiedad drop_first
haciendo que la función elimine la variable de la primera categoría. Lo que se puede comprobar con el siguiente ejemplo.
dummies_drop = pd.get_dummies(data, drop_first=True) dummies_drop
precio color_rojo color_verde 0 45 1 0 1 53 0 1 2 60 0 0 3 42 0 1 4 34 1 0
Lo que elimina la columna del color azul.
Recupera los valores originales
En la versión 1.5 de Pandas se introdujo la función from_dummies()
con la que se puede recuperar la variable original a partir de las dummies. Este método requiere las columnas para crear un nuevo DataFrame.
pd.from_dummies(dummies[['color_azul', 'color_rojo', 'color_verde']])
0 color_rojo 1 color_verde 2 color_azul 3 color_verde 4 color_rojo
Por defecto se obtiene una serie con el nombre de la variable, pero se le puede indicar la propiedad sep
para indicar el carácter usado para separar el nombre de la variable de las categorías, para obtener así la variable original.
pd.from_dummies(dummies[['color_azul', 'color_rojo', 'color_verde']], sep='_')
color 0 rojo 1 verde 2 azul 3 verde 4 rojo
En el caso de que se eliminase una de las categorías también se puede recuperar los datos originales. Solamente se le debe indicar a la función el valor de la categoría por defecto mediante el uso de la propiedad default_category
.
pd.from_dummies(dummies[['color_rojo', 'color_verde']], sep='_', default_category='azul')
color 0 rojo 1 verde 2 azul 3 verde 4 rojo
Conclusiones
Las funciones get_dummies()
y from_dummies()
de Pandas permite trabajar de una forma rápida y eficiente con variables dummies o variables binarias. Así, en una sola línea se pueden preparar los datos categóricos para poder ser utilizados en cualquier modelo de aprendizaje automático.
Deja una respuesta