Spalten mit wenigen Beobachtungen entfernen
Nach viel Feature Engineering ist es eine gute Idee, kurz zurückzutreten und zu prüfen, was du erstellt hast. Wenn du Automatisierungstechniken für kategoriale Features wie Explode oder One-Hot-Encoding verwendet hast, hast du möglicherweise Hunderte neuer binärer Features. Das Thema Feature-Auswahl würde einen eigenen Kurs füllen, aber es gibt ein paar schnelle Schritte, mit denen du die Dimensionalität deines Datensatzes reduzieren kannst.
In dieser Übung entfernen wir Spalten, die weniger als 30 Beobachtungen haben. 30 ist eine gängige Mindestanzahl von Beobachtungen für statistische Signifikanz. Mit weniger als 30 führen die Beziehungen schnell zu Overfitting — oft nur aus purem Zufall!
HINWEIS: Die Daten stehen im DataFrame df zur Verfügung.
Diese Übung ist Teil des Kurses
<Kurs>Feature Engineering mit PySpark</Kurs>Übungsanweisungen
- Verwende die bereitgestellte
for-Schleife, die über die Liste der binären Spalten iteriert, und berechne diesumder Werte in der Spalte mit der Funktionagg. Nutzecollect(), um die Berechnung sofort auszuführen, und speichere das Ergebnis inobs_count. - Vergleiche
obs_countmitobs_threshold; dieif-Bedingung soll wahr sein, wennobs_countkleiner oder gleichobs_thresholdist. - Entferne Spalten, die zur Liste
cols_to_removehinzugefügt wurden, mitdrop(). Denk daran, dass*das Entpacken der Liste ermöglicht. - Gib die Anfangs- und Endform der PySpark-DataFrames aus, indem du
count()für die Anzahl der Datensätze undlen()aufdf.columnsbzw.new_df.columnsfür die Anzahl der Spalten verwendest.
Interaktive praktische Übung
Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.
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.____)))