LabelEncoder

Nombre completo
sklearn.preprocessing.LabelEncoder
Librería
scikit-learn
Sintaxis

sklearn.preprocessing.LabelEncoder()

Descripción

La función sklearn.preprocessing.LabelEncoder codifica etiquetas de una característica categórica en valores numéricos entre 0 y el número de clases menos 1. Una vez instanciado, el método fit lo entrena (creando el mapeado entre las etiquetas y los números) y el método transform transforma las etiquetas que se incluyan como argumento en los números correspondientes. El método fit_transform realiza ambas acciones simultáneamente.

El único atributo de esta función, classes_, almacena el array que mapea etiquetas y números (que coinciden con el índice de cada etiqueta en el array).

Ejemplos

Apliquemos esta función al dataset Titanic:

titanic = sns.load_dataset("titanic")
titanic.head(1)

Dataset Titanic

En este dataset se incluyen varias características categóricas: sex, embarked, class... Vamos a aplicar el codificador a la característica "embark_town", por ejemplo. Comencemos confirmando los valores diferentes en este campo:

titanic.embark_town.unique()

array(['Southampton', 'Cherbourg', 'Queenstown', nan], dtype=object)

Vemos que en el campo hay valores nulos que deberían ser tratados previamente. Como en este escenario el objetivo es probar el codificador LabelEncoder, vamos a optar por agrupar los valores nulos en una categoría independiente, dejando de lado opciones más sofisticadas como predicción vía Machine Learning:

titanic.embark_town.fillna("nan", inplace = True)

titanic.embark_town.unique()

array(['Southampton', 'Cherbourg', 'Queenstown', 'nan'], dtype=object)

Hemos convertido los valores nulos en etiquetas de texto con el valor "nan". Ahora ya podemos aplicar el codificador:

embark_town_codified = le.fit_transform(titanic.embark_town)

Veamos el mapa creado y comparemos los valores originales y las valores generados:

le.classes_

array(['Cherbourg', 'Queenstown', 'Southampton', 'nan'], dtype=object)

Este array nos indica que el valor "Cherbourg" va a ser mapeado al número 0, "Queenstown" al 1, etc.

pd.DataFrame({
    "original": titanic.embark_town[:6],
    "codificada": embark_town_codified[:6]
})

Valores originales y codificados

Ahora podríamos agregar los valores al dataframe o sustituir la columna original por el array que hemos creado. También podríamos hacerlo directamente:

titanic.embark_town = le.fit_transform(titanic.embark_town)

titanic.head()

Dataset transformado

Para terminar, el método inverse_transform permite transformar las etiquetas generadas en los valores originales.

Enviado por admin el Dom, 14/04/2019 - 14:34