EmpezarEmpieza gratis

Tratamiento ingenuo de valores ausentes y categóricos

Random Forest Regression es lo bastante robusto como para permitirnos ignorar muchos de los pasos de preparación de datos más tediosos y que consumen tiempo. Aunque algunas implementaciones de Random Forest gestionan automáticamente los valores ausentes y categóricos, la de PySpark no lo hace. Sin embargo, las matemáticas son las mismas, así que podemos apañarnos con algunos reemplazos sencillos.

Para los valores ausentes, como nuestros datos son estrictamente positivos, asignaremos -1. El random forest dividirá sobre este valor y lo tratará de forma diferente al resto de valores de la misma característica.

Para los valores categóricos, podemos mapear los valores de texto a números y, de nuevo, el random forest los tratará adecuadamente dividiendo sobre ellos. En este ejemplo, recuperaremos pipelines de Introduction to PySpark para escribir el código de forma más concisa. Ten en cuenta que el ejercicio empezará mostrando los dtypes de las columnas del dataframe; compáralos con los resultados al final de este ejercicio.

NOTA: Pipeline y StringIndexer ya están importados para ti. La lista categorical_cols también está disponible.

Este ejercicio forma parte del curso

Ingeniería de características con PySpark

Ver curso

Instrucciones del ejercicio

  • Sustituye los valores en WALKSCORE y BIKESCORE por -1 usando fillna() y el parámetro subset.
  • Crea una lista de StringIndexer usando una list comprehension para iterar por cada columna en categorical_cols.
  • Aplica fit() y transform() al pipeline indexer_pipeline.
  • Elimina categorical_cols usando drop() porque ya no son necesarias. Inspecciona los tipos de datos resultantes con dtypes.

ejercicio interactivo práctico

Prueba este ejercicio completando este código de ejemplo.

# 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)
Editar y ejecutar código