Kom igångKom igång gratis

Enkel hantering av saknade och kategoriska värden

Random Forest Regression är tillräckligt robust för att vi ska kunna bortse från många av de mer tidskrävande och omständliga förberedelsestegen. Vissa implementationer av Random Forest hanterar saknade och kategoriska värden automatiskt, men inte PySpark:s. Matematiken är dock densamma, så vi kan klara oss med några enkla ersättningsvärden.

Eftersom våra data är strikt positiva tilldelar vi saknade värden -1. Random forest-modellen kommer att dela på det här värdet och behandla det annorlunda än övriga värden i samma särdrag.

För kategoriska värden kan vi helt enkelt mappa textvärden till tal – random forest hanterar dem på lämpligt sätt genom att dela på dem. I det här exemplet plockar vi fram pipelines från Introduktion till PySpark för att skriva koden mer koncist. Observera att övningen börjar med att visa dtypes för kolumnerna i dataramen – jämför dem med resultaten i slutet av övningen.

OBS: Pipeline och StringIndexer är redan importerade. Listan categorical_cols är också tillgänglig.

Den här övningen är en del av kursen

Feature Engineering med PySpark

Visa kurs

Övningsinstruktioner

  • Ersätt värdena i WALKSCORE och BIKESCORE med -1 med hjälp av fillna() och parametern subset.
  • Skapa en lista med StringIndexers genom listomfattning för att iterera över varje kolumn i categorical_cols.
  • Använd fit() och transform() på pipelinen indexer_pipeline.
  • Ta bort categorical_cols med drop() eftersom de inte längre behövs. Inspektera resultatets datatyper med dtypes.

Interaktiv övning med praktiskt arbete

Testa den här övningen genom att slutföra den här exempelkoden.

# 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)
Redigera och kör kod