Aan de slagBegin gratis

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

Bekijk cursus

Oefeninstructies

  • Gebruik de gegeven for-lus die door de lijst met binaire kolommen itereert en bereken de sum van de waarden in de kolom met de functie agg. Gebruik collect() om de berekening meteen uit te voeren en sla de resultaten op in obs_count.
  • Vergelijk obs_count met obs_threshold; de if-statement moet waar zijn als obs_count kleiner dan of gelijk aan obs_threshold is.
  • Verwijder kolommen die aan de lijst cols_to_remove zijn toegevoegd met drop(). 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 en len() op df.columns of new_df.columns voor 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.____)))
Code bewerken en uitvoeren