ÎncepețiÎncepe gratuit

Gestionarea simplificată a valorilor lipsă și categoriale

Regresia Random Forest este suficient de robustă pentru a ne permite să ignorăm mulți dintre pașii de pregătire a datelor care consumă mult timp. Deși unele implementări de Random Forest gestionează automat valorile lipsă și cele categoriale, cea din PySpark nu face acest lucru. Matematica rămâne însă aceeași, astfel că ne putem descurca cu înlocuiri simple ale valorilor.

Pentru valorile lipsă, deoarece datele noastre sunt strict pozitive, vom atribui valoarea -1. Random forest-ul va realiza o separare pe această valoare și o va trata diferit față de celelalte valori din aceeași caracteristică.

Pentru valorile categoriale, putem pur și simplu să mapăm textul la numere — random forest-ul le va gestiona corespunzător prin separare. În acest exercițiu, vom folosi pipelines din cursul Introducere în PySpark pentru a scrie codul mai concis. Reține că exercițiul va afișa mai întâi dtypes-urile coloanelor din dataframe — compară-le cu rezultatele de la sfârșitul exercițiului.

NOTĂ: Pipeline și StringIndexer sunt deja importate. Lista categorical_cols este de asemenea disponibilă.

Acest exercițiu face parte din cursul

Feature Engineering cu PySpark

Vezi cursul

Instrucțiuni pentru exercițiu

  • Înlocuiește valorile din WALKSCORE și BIKESCORE cu -1, folosind fillna() și parametrul subset.
  • Creează o listă de StringIndexer-e prin list comprehension, iterând peste fiecare coloană din categorical_cols.
  • Aplică fit() și transform() pe pipeline-ul indexer_pipeline.
  • Elimină categorical_cols folosind drop(), deoarece nu mai sunt necesare. Inspectează tipurile de date rezultate folosind dtypes.

Exercițiu interactiv practic

Încearcă acest exercițiu completând acest cod de exemplu.

# 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)
Editează și rulează codul