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
Instrukcje do ćwiczenia
- Korzystając z dostarczonej pętli
for, która iteruje po liście kolumn binarnych, obliczsumwartości w kolumnie przy użyciu funkcjiagg. Użyjcollect(), aby natychmiast wykonać obliczenia i zapisz wynik do zmiennejobs_count. - Porównaj
obs_countzobs_threshold– instrukcjaifpowinna być prawdziwa, gdyobs_countjest mniejsze lub równeobs_threshold. - Usuń kolumny dodane do listy
cols_to_remove, używając funkcjidrop(). 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 orazlen()nadf.columnslubnew_df.columnsdo 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.____)))