Aan de slagBegin gratis

Naïef omgaan met missende en categorische waarden

Random Forest Regression is robuust genoeg om veel van de tijdrovende en saaie stappen in gegevensvoorbereiding te kunnen overslaan. Hoewel sommige implementaties van Random Forest automatisch met missende en categorische waarden omgaan, doet PySpark dat niet. De wiskunde blijft echter hetzelfde, dus we kunnen volstaan met een paar eenvoudige vervangingen.

Voor missende waarden, omdat onze data strikt positief is, wijzen we -1 toe. Het random forest zal op deze waarde splitsen en die anders behandelen dan de rest van de waarden binnen dezelfde feature.

Voor categorische waarden kunnen we de tekstwaarden simpelweg naar getallen mappen; ook hier zal het random forest ze passend behandelen door erop te splitsen. In dit voorbeeld halen we pipelines uit Introduction to PySpark weer van stal om onze code compacter te schrijven. Let op: de oefening begint met het tonen van de dtypes van de kolommen in de dataframe; vergelijk die met de resultaten aan het einde van deze oefening.

OPMERKING: Pipeline en StringIndexer zijn al voor je geïmporteerd. De lijst categorical_cols is ook beschikbaar.

Deze oefening maakt deel uit van de cursus

Feature Engineering met PySpark

Bekijk cursus

Oefeninstructies

  • Vervang de waarden in WALKSCORE en BIKESCORE door -1 met fillna() en de parameter subset.
  • Maak een lijst met StringIndexers door met list comprehension over elke kolom in categorical_cols te itereren.
  • Pas fit() en transform() toe op de pipeline indexer_pipeline.
  • Verwijder de categorical_cols met drop() omdat ze niet meer nodig zijn. Bekijk de resulterende datatypes met dtypes.

Interactieve oefening met praktijkervaring

Probeer deze oefening door deze voorbeeldcode aan te vullen.

# Replace missing values
df = df.____(____, ____=[____, ____])

# Create list of StringIndexers using list comprehension
indexers = [____(inputCol=____, outputCol=____+"_IDX")\
            .setHandleInvalid("keep") for ____ in ____]
# Create pipeline of indexers
indexer_pipeline = Pipeline(stages=indexers)
# Fit and Transform the pipeline to the original data
df_indexed = ____.____(df).____(df)

# Clean up redundant columns
df_indexed = df_indexed.____(*____)
# Inspect data transformations
print(df_indexed.dtypes)
Code bewerken en uitvoeren