Zacznij terazZacznij za darmo

Proste podejście do brakujących i kategorycznych wartości

Regresja Random Forest jest na tyle odporna, że pozwala pominąć wiele czasochłonnych kroków przygotowania danych. Niektóre implementacje Random Forest obsługują brakujące i kategoryczne wartości automatycznie – implementacja w PySparku tego jednak nie robi. Matematyka pozostaje ta sama, więc możemy sobie pozwolić na proste zastępowanie wartości.

Ponieważ nasze dane są ściśle dodatnie, brakującym wartościom przypiszemy -1. Random Forest podzieli dane względem tej wartości i potraktuje ją inaczej niż pozostałe wartości w tej samej cesze.

W przypadku wartości kategorycznych możemy po prostu odwzorować wartości tekstowe na liczby – Random Forest odpowiednio sobie z nimi poradzi, dzieląc na ich podstawie. W tym ćwiczeniu odświeżymy znajomość pipelines z kursu Introduction to PySpark, żeby napisać kod bardziej zwięźle. Zwróć uwagę, że ćwiczenie zaczyna się od wyświetlenia dtypes kolumn w ramce danych – porównaj je z wynikami na końcu tego ćwiczenia.

UWAGA: Pipeline i StringIndexer są już zaimportowane. Lista categorical_cols jest również dostępna.

To ćwiczenie jest częścią kursu

Inżynieria cech z PySpark

Zobacz kurs

Instrukcje do ćwiczenia

  • Zastąp brakujące wartości w kolumnach WALKSCORE i BIKESCORE wartością -1, używając fillna() z parametrem subset.
  • Utwórz listę obiektów StringIndexer, korzystając z list comprehension, aby iterować po każdej kolumnie w categorical_cols.
  • Zastosuj fit() i transform() do potoku indexer_pipeline.
  • Usuń kolumny categorical_cols za pomocą drop(), ponieważ nie są już potrzebne. Sprawdź wynikowe typy danych, używając dtypes.

Interaktywne ćwiczenie praktyczne

Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.

# 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)
Edytuj i uruchom kod