Categorische kolommen encoden II: OneHotEncoder
Oké – je hebt je categorische kolommen numeriek gecodeerd. Kun je nu doorgaan met pipelines en XGBoost? Nog niet! In de categorische kolommen van deze gegevensset is er geen natuurlijke ordening tussen de waarden. Voorbeeld: met LabelEncoder is de CollgCr-Neighborhood gecodeerd als 5, terwijl Veenker is gecodeerd als 24 en Crawfor als 6. Is Veenker “groter” dan Crawfor en CollgCr? Nee – en het model zo’n natuurlijke ordening laten aannemen kan tot slechte prestaties leiden.
Daarom is er nog een stap nodig: je moet one-hot encoding toepassen om binaire, ofwel “dummy”-variabelen te maken. Dit kan met scikit-learns OneHotEncoder.
Deze oefening maakt deel uit van de cursus
Extreme Gradient Boosting met XGBoost
Oefeninstructies
- Importeer
OneHotEncoderuitsklearn.preprocessing. - Maak een
OneHotEncoder-object met de naamohe. Geef het keywordargumentsparse=Falsemee. - Pas de
OneHotEncodertoe opdfmet de methode.fit_transform()en sla het resultaat op alsdf_encoded. De output is een NumPy-array. - Print de eerste 5 rijen van
df_encoded, en vervolgens de vorm (shape) van zoweldfalsdf_encodedom het verschil te vergelijken.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
# Import OneHotEncoder
____
# Create OneHotEncoder: ohe
ohe = ____
# Apply OneHotEncoder to categorical columns - output is no longer a dataframe: df_encoded
df_encoded = ____
# Print first 5 rows of the resulting dataset - again, this will no longer be a pandas dataframe
print(df_encoded[:5, :])
# Print the shape of the original DataFrame
print(df.shape)
# Print the shape of the transformed array
print(df_encoded.shape)