Zacznij terazZacznij za darmo

Usuwanie kolumn z małą liczbą obserwacji

Po intensywnej pracy nad inżynierią cech warto zatrzymać się i przejrzeć to, co udało się stworzyć. Jeśli korzystałeś z technik automatyzacji dla cech kategorycznych – takich jak rozwijanie wartości czy kodowanie OneHot – możesz teraz mieć setki nowych cech binarnych. Selekcja cech to temat na osobny kurs, ale już teraz możesz podjąć kilka prostych kroków, aby zmniejszyć wymiarowość swojego zbioru danych.

W tym ćwiczeniu usuniemy kolumny, które mają mniej niż 30 obserwacji. Liczba 30 to powszechnie przyjęte minimum zapewniające istotność statystyczną – przy mniejszej liczbie obserwacji relacje między zmiennymi mogą wynikać z czystego przypadku i prowadzić do przeuczenia modelu.

UWAGA: Dane są dostępne w ramce danych df.

To ćwiczenie jest częścią kursu

Inżynieria cech z PySpark

Zobacz kurs

Instrukcje do ćwiczenia

  • Korzystając z dostarczonej pętli for, która iteruje po liście kolumn binarnych, oblicz sum wartości w kolumnie przy użyciu funkcji agg. Użyj collect(), aby natychmiast wykonać obliczenia i zapisz wynik do zmiennej obs_count.
  • Porównaj obs_count z obs_threshold – instrukcja if powinna być prawdziwa, gdy obs_count jest mniejsze lub równe obs_threshold.
  • Usuń kolumny dodane do listy cols_to_remove, używając funkcji drop(). Pamiętaj, że * pozwala na rozpakowanie listy.
  • Wyświetl początkowy i końcowy rozmiar ramek danych PySpark, używając count() do określenia liczby rekordów oraz len() na df.columns lub new_df.columns do określenia liczby kolumn.

Interaktywne ćwiczenie praktyczne

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

obs_threshold = 30
cols_to_remove = list()
# Inspect first 10 binary columns in list
for col in binary_cols[0:10]:
  # Count the number of 1 values in the binary column
  obs_count = df.____({col: ____}).____()[0][0]
  # If less than our observation threshold, remove
  if ____ ____ ____:
    cols_to_remove.append(col)
    
# Drop columns and print starting and ending dataframe shapes
new_df = df.____(*____)

print('Rows: ' + str(df.____()) + ' Columns: ' + str(____(df.____)))
print('Rows: ' + str(new_df.____()) + ' Columns: ' + str(____(new_df.____)))
Edytuj i uruchom kod