Kolommen met weinig observaties verwijderen
Na veel feature engineering is het goed om even afstand te nemen en te bekijken wat je hebt gemaakt. Als je automatische technieken op categorische features hebt gebruikt, zoals exploden of OneHot Encoding, kan het zijn dat je nu honderden nieuwe binaire features hebt. Hoewel feature selectie een onderwerp is voor een hele andere cursus, zijn er enkele snelle stappen die je kunt nemen om de dimensionaliteit van je gegevensset te verkleinen.
In deze oefening gaan we kolommen verwijderen die minder dan 30 observaties hebben. Dertig is een gangbare ondergrens voor statistische significantie. Minder dan dat en de relaties leiden al snel tot overfitting door pure toevalstreffers!
LET OP: De data is beschikbaar in de dataframe df.
Deze oefening maakt deel uit van de cursus
Feature Engineering met PySpark
Oefeninstructies
- Gebruik de gegeven
for-lus die door de lijst met binaire kolommen itereert en bereken desumvan de waarden in de kolom met de functieagg. Gebruikcollect()om de berekening meteen uit te voeren en sla de resultaten op inobs_count. - Vergelijk
obs_countmetobs_threshold; deif-statement moet waar zijn alsobs_countkleiner dan of gelijk aanobs_thresholdis. - Verwijder kolommen die aan de lijst
cols_to_removezijn toegevoegd metdrop(). Denk eraan dat de*de lijst laat uitpakken. - Print de begin- en eindvorm van de PySpark-dataframes door
count()te gebruiken voor het aantal records enlen()opdf.columnsofnew_df.columnsvoor het aantal kolommen.
Interactieve oefening met praktijkervaring
Probeer deze oefening door deze voorbeeldcode aan te vullen.
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.____)))