Inizia subitoInizia gratis

Gestire in modo ingenuo valori mancanti e categorici

La Random Forest Regression è abbastanza robusta da permetterci di ignorare molti dei passaggi di preparazione dei dati più lunghi e noiosi. Anche se alcune implementazioni di Random Forest gestiscono automaticamente i valori mancanti e categorici, quella di PySpark non lo fa. La matematica, però, resta la stessa, quindi possiamo cavarcela con sostituzioni di valori piuttosto semplici.

Per i valori mancanti, dato che i nostri dati sono strettamente positivi, assegneremo -1. La random forest effettuerà uno split su questo valore e lo tratterà in modo diverso rispetto agli altri valori della stessa feature.

Per i valori categorici, possiamo mappare i valori testuali in numeri e, anche qui, la random forest li gestirà opportunamente effettuando degli split su di essi. In questo esempio rispolvereremo le pipelines viste in Introduction to PySpark per scrivere il codice in modo più conciso. Nota che l'esercizio inizierà mostrando i dtypes delle colonne nel dataframe; confrontali con i risultati alla fine dell'esercizio.

NOTA: Pipeline e StringIndexer sono già importati per te. È inoltre disponibile la lista categorical_cols.

Questo esercizio fa parte del corso

Feature Engineering con PySpark

Visualizza corso

Istruzioni dell'esercizio

  • Sostituisci i valori in WALKSCORE e BIKESCORE con -1 usando fillna() e il parametro subset.
  • Crea una lista di StringIndexer usando una list comprehension per iterare su ciascuna colonna in categorical_cols.
  • Applica fit() e transform() alla pipeline indexer_pipeline.
  • Elimina le categorical_cols usando drop() poiché non servono più. Controlla i tipi di dato risultanti con dtypes.

esercizio interattivo pratico

Prova questo esercizio completando questo codice di esempio.

# 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)
Modifica ed esegui il codice