One-hot encoderen
In de Verenigde Staten bepaalt waar je woont naar welke scholen je kinderen kunnen gaan. Het is dus logisch dat veel mensen veel waarde hechten aan in welk schooldistrict hun toekomstige huis valt. Hoewel de schooldistricten genummerd zijn in SCHOOLDISTRICTNUMBER, zijn het in feite categorische waarden. Optellen of middelen van deze waarden heeft daarom geen betekenis. In dit voorbeeld zetten we SCHOOLDISTRICTNUMBER om van een categorische variabele naar een numerieke vector, zodat we die later in ons Machine Learning-model kunnen gebruiken.
Deze oefening maakt deel uit van de cursus
Feature Engineering met PySpark
Oefeninstructies
- Maak een
StringIndexer-transformer met de naamstring_indexermetSCHOOLDISTRICTNUMBERals input enSchool_Indexals output. - Pas de transformer
string_indexertoe opdfmetfit()entransform(). Sla de getransformeerde dataframe op inindexed_df. - Maak een
OneHotEncoder-transformer met de naamencodermetSchool_Indexals input enSchool_Vecals output. - Pas de transformatie toe op
indexed_dfmettransform(). Bekijk de tussenstappen van de transformatie met de meegeleverde code.
Interactieve oefening met praktijkervaring
Probeer deze oefening door deze voorbeeldcode aan te vullen.
from pyspark.ml.feature import OneHotEncoder, StringIndexer
# Map strings to numbers with string indexer
string_indexer = ____(inputCol=____, outputCol=____)
indexed_df = ____.____(df).____(df)
# Onehot encode indexed values
encoder = ____(inputCol=____, outputCol=____)
encoded_df = ____.____(indexed_df)
# Inspect the transformation steps
encoded_df[['SCHOOLDISTRICTNUMBER', 'School_Index', 'School_Vec']].show(truncate=100)