Codificación One-Hot-Encoding de un conjunto de características categóricas

El método para aplicar una codificación de tipo One-Hot-Encoding a un conjunto de características categóricas pasa por:

  1. Codificación de las características con valores entre 0 y el número de clases -1, por ejemplo mediante la función LabelEncoder de sklearn.
  2. Aplicación de la codificación One-Hot-Encoding, por ejemplo mediante la función OneHotEncoder de sklearn.

Para aplicar ambas codificaciones, además de importar las funciones correspondientes, solo hay que considerar que la función OneHotEncoder necesita como entrada una estructura de tipo array, por lo que habrá que redimensionar la salida de LabelEncoder. Así, si tenemos la siguiente lista de valores (también podría ser una serie Pandas):

y = ["a", "b", "a", "c"]

Podemos realizar la conversión con el siguiente código:

from sklearn.preprocessing import OneHotEncoder
from sklearn.preprocessing import LabelEncoder

 

ohe = OneHotEncoder(sparse = False)
le = LabelEncoder()
ohe.fit_transform(le.fit_transform(y).reshape(-1, 1))

Si deseásemos que el resultado fuese una matriz dispersa, bastaría con crear la instancia de la clase OneHotEncoder sin el argumento sparse (o dándole el valor True)

Otra alternativa consiste en la creación de una clase, CatOneHotEncoder que aplique ambas condificaciones:

from sklearn.preprocessing import OneHotEncoder
from sklearn.preprocessing import LabelEncoder

 

class CatOneHotEncoder():

 

    def __init__(self):
        self.ohe = OneHotEncoder()
        self.le = LabelEncoder()

 

    def fit_transform(self, x):
        return self.ohe.fit_transform(self.le.fit_transform(x).reshape(-1, 1))

 

    def transform(self, x):
        return self.ohe.transform(self.la.transform( x.reshape(-1, 1)))

Opción que nos permite añadir métodos adicionales, como transform que nos permitirá transformar un segundo listado de características tras haber entrenado la clase.