Antonio Fernández
Troyano

Cómo traducir features categóricas de un dataset en Python para realizar machine learning (Parte I)

Tal y como sabrás, los modelos de machine learning no son capaces de funcionar con un dataset en el que alguna de las features es un texto.

Para ilustrar lo que comentamos, vamos a coger un dataset de la UCI Machine Learning Repository, en este caso el «Adult data set».

En este caso no nos importa mucho el contenido del dataset, pero básicamente recoge datos de varios censos y se trata de determinar si la persona tienen unos ingresos superiores o no a 50k$/año (income_year):

Data frame UCI Adults traducción de features

Tal y como observamos, el sexo de la persona (sex) es una variable categórica que deberíamos traducir a valores numéricos, por ejemplo male = 0 y female = 1.

Vamos a ver varias formas de traducir estas features categóricas en un data frame para incorporarlas a nuestro modelo de machine learning.

Con el fin de ilustrar un caso completo de variables categóricas o features a traducir, vamos a construir un dataset sencillo con 10 observaciones que nos permita comprender bien todas las opciones que tenemos disponibles.

Ejemplo dataframe sencillo para traducir features en python y usarlas en machine learning
import pandas as pd
import numpy as np

datos={"Tipo":["Cerveza","Vino","Tequila","Ron","Ginebra","Vino","Cerveza","Cerveza","Ron","Vino"],
      "Graduación":["Baja","Baja","Muy alta","Media","Alta","Media","Media","Baja","Alta","Media"],
      "Precio_Eur":[3,12,20,18,16,15,4,3,18,10],
      "Recipiente":["Lata","Botella","Botella","Botella","Botella","Botella","Botella","Lata","Botella","Botella"]}

df=pd.DataFrame(datos)

df

A) Encodings clásicos

1. Buscar y remplazar

La opción más sencilla sería utilizar un bucle for que recorriera todos los valores de la columna y fuera comprobando, con un «if» el valor de la celda y asignarle un número. Si bien es una manera «sencilla», en data frames grandes existen maneras mucho más eficientes de trabajar.
Así mismo en el caso de tener que categorizar 8 o 9 variables, la construcción de un «if-elif» puede ser un infierno.

Una manera sencilla sería utilizar la función replace:

Ejemplo de replace features pandas en python para machine learning

2. Ordinal encoding o encoding ordenado

Existen algunas categorías que tienen cierto orden. Por ejemplo, si traducimos a números la graduación de alcohol de la bebida, una graduación «baja» = 0, «media» = 1, «alta» = 2 y «muy alta» = 3 tiene sentido.

En estos casos aplicaremos un ordinal encoding o encoding ordenado.

Ordinal encoding o encoding ordinario de features para machine learning en python

3. One-hot encoding

A diferencia de la graduación, en el caso del «tipo» de bebida no existe ninguna relación «de cercanía» entre, por ejemplo, «cerveza» = 0 y «vino» = 1.

En estos casos es necesario realizar un one-hot encoding mediante los siguientes pasos:

  • Separar cada categoría en una columna. En nuestro caso, una columna para cerveza, una para el vino, etc
  • Incluir un 1 por columna según el tipo de observación

En este caso vamos a hacer uso de la función get_dummies de la librería pandas:

one hot encoding de features para machine learning python es español

4. Encoding binario o binary encoding

Una desventaja del one-hot encoding es que, en el caso de contar con muchas categorías a traducir puede sobrecargar el data frame con muchas columnas. En el caso de 100 variables a traducir, 100 columnas.

Una alternativa para traducir variables en python y poder utilizarlas en machine learning es el encoding binario o binary encoding, que traduce cada variable a binario. El proceso sigue estos pasos:

  • La función revisa cada valor de la columna que queremos traducir y le asigna un número a cada categoría que encuentra (0 para cerveza, 1 para vino, 2 para tequila, etc)
  • Convierte a binario ese número
  • Crea las columnas necesarias para colocar cada valor binario de cada categoría

Y hasta aquí la primera parte del cómo traducir features categóricas de un dataset en python para, posteriormente, realizar algún tipo de entrenamiento con modelos de machine learning de clasificación como random forest de clasificación, regresiones logísticas, etc

¡Comparte!

Facebook
Twitter
LinkedIn
WhatsApp

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *