Jednoduché zpracování chybějících a kategorických hodnot
Random Forest Regression je dostatečně robustní na to, abychom mohli přeskočit mnohé časově náročné kroky přípravy dat. Některé implementace Random Forestu si s chybějícími a kategorickými hodnotami poradí automaticky, PySpark to za nás ale neudělá. Matematika zůstává stejná, takže si vystačíme s jednoduchými náhradami hodnot.
Pro chybějící hodnoty použijeme -1, protože naše data jsou striktně kladná. Random forest se na tuto hodnotu rozdělí a bude s ní pracovat odlišně než s ostatními hodnotami ve stejném příznaku.
Kategorické hodnoty jednoduše namapujeme na čísla – random forest se s nimi opět vhodně vypořádá pomocí větvení. V tomto příkladu si oprášíme pipelines z kurzu Introduction to PySpark, abychom kód napsali stručněji. Cvičení začíná zobrazením dtypes sloupců v dataframu – porovnej je s výsledky na konci tohoto cvičení.
POZNÁMKA: Pipeline a StringIndexer jsou již naimportovány. K dispozici je také seznam categorical_cols.
Toto cvičení je součástí kurzu
Feature Engineering with PySpark
Pokyny k cvičení
- Nahraď hodnoty ve sloupcích
WALKSCOREaBIKESCOREhodnotou -1 pomocífillna()a parametrusubset. - Vytvoř seznam
StringIndexerů pomocí list comprehension – iteruj přes každý sloupec vcategorical_cols. - Aplikuj
fit()atransform()na pipelineindexer_pipeline. - Odstraň
categorical_colspomocídrop(), protože je už nepotřebujeme. Zkontroluj výsledné datové typy pomocídtypes.
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
# 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)