Codificación de columnas categóricas I: LabelEncoder
Ahora que has visto lo que hay que hacer para preparar los datos de viviendas para XGBoost, vamos a seguir el proceso paso a paso.
Primero, tendrás que completar los valores faltantes; como viste antes, la columna LotFrontage tiene muchos valores ausentes. Después, tendrás que codificar las columnas categóricas del conjunto de datos usando one-hot encoding para que queden en formato numérico. Puedes ver este vídeo del curso Supervised Learning with scikit-learn para refrescar la idea.
Los datos tienen cinco columnas categóricas: MSZoning, PavedDrive, Neighborhood, BldgType y HouseStyle. Scikit-learn tiene una función LabelEncoder que convierte los valores de cada columna categórica en enteros. Aquí practicarás cómo usarla.
Este ejercicio forma parte del curso
Extreme Gradient Boosting con XGBoost
Instrucciones del ejercicio
- Importa
LabelEncoderdesklearn.preprocessing. - Rellena los valores faltantes en la columna
LotFrontagecon0usando.fillna(). - Crea una máscara booleana para las columnas categóricas. Puedes hacerlo comprobando si
df.dtypeses igual aobject. - Crea un objeto
LabelEncoder. Puedes hacerlo del mismo modo que instancias cualquier estimador de scikit-learn. - Codifica todas las columnas categóricas a enteros usando
LabelEncoder(). Para ello, utiliza el método.fit_transform()deleen la función lambda proporcionada.
Ejercicio interactivo práctico
Prueba este ejercicio y completa el código de muestra.
# Import LabelEncoder
____
# Fill missing values with 0
df.LotFrontage = ____
# Create a boolean mask for categorical columns
categorical_mask = (____ == ____)
# Get list of categorical column names
categorical_columns = df.columns[categorical_mask].tolist()
# Print the head of the categorical columns
print(df[categorical_columns].head())
# Create LabelEncoder object: le
le = ____
# Apply LabelEncoder to categorical columns
df[categorical_columns] = df[categorical_columns].apply(lambda x: ____(x))
# Print the head of the LabelEncoded categorical columns
print(df[categorical_columns].head())