ПочатиПочніть безкоштовно

Наївна обробка пропусків і категоріальних значень

Random Forest Regression є достатньо стійким, тож ми можемо оминути багато трудомістких і нудних кроків підготовки даних. Хоча деякі реалізації Random Forest автоматично працюють з пропущеними та категоріальними значеннями, у PySpark цього немає. Однак математика лишається тією самою, тож ми можемо дозволити собі наївні заміни значень.

Для пропущених значень, оскільки наші дані строго додатні, призначимо -1. Random forest розділятиме за цим значенням і оброблятиме його інакше, ніж решту значень у тій самій ознаці.

Для категоріальних значень ми можемо просто відобразити текстові значення у числа, і знову ж таки random forest коректно їх обробить, виконуючи розбиття за цими значеннями. У цьому прикладі ми знову скористаємося pipelines з Introduction to PySpark, щоб писати код лаконічніше. Зверніть увагу, що вправа розпочнеться з показу dtypes стовпців у датафреймі; порівняйте їх із результатами наприкінці цієї вправи.

ПРИМІТКА: Pipeline і StringIndexer уже імпортовано для вас. Список categorical_cols також доступний.

Ця вправа є частиною курсу

Опрацювання ознак у PySpark

Переглянути курс

Інструкції до вправи

  • Замініть значення у WALKSCORE і BIKESCORE на -1 за допомогою fillna() та параметра subset.
  • Створіть список StringIndexer за допомогою спискової генерації, ітеруючись кожним стовпцем у categorical_cols.
  • Застосуйте fit() і transform() до конвеєра indexer_pipeline.
  • Видаліть categorical_cols за допомогою drop(), оскільки вони більше не потрібні. Перевірте типи результатних даних за допомогою dtypes.

Інтерактивна практична вправа

Спробуйте виконати цю вправу, доповнивши цей зразок коду.

# 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)
Редагувати та запускати код