Ta bort kolumner med få observationer
Efter att ha gjort mycket särdragsframtagning är det en bra idé att ta ett steg tillbaka och granska vad du har skapat. Om du har använt automatiseringstekniker på dina kategoriska särdrag, som att expandera eller OneHot-koda dem, kan du ha fått hundratals nya binära särdrag. Även om särdragsurval är ett ämne för en hel annan kurs, finns det några snabba åtgärder du kan vidta för att minska dimensionaliteten i din datamängd.
I den här övningen ska vi ta bort kolumner som har färre än 30 observationer. 30 är ett vanligt minsta antal observationer för statistisk signifikans. Har du färre än så riskerar sambanden att leda till överanpassning – ofta på grund av ren slump!
OBS: Data finns tillgänglig i dataframen df.
Den här övningen är en del av kursen
Feature Engineering med PySpark
Övningsinstruktioner
- Använd den befintliga
for-loopen som itererar genom listan med binära kolumner och beräknasumav värdena i kolumnen med funktionenagg. Användcollect()för att köra beräkningen direkt och spara resultatet iobs_count. - Jämför
obs_countmedobs_threshold–if-satsen ska vara sann omobs_countär mindre än eller lika medobs_threshold. - Ta bort kolumner som lagts till i listan
cols_to_removemed hjälp avdrop(). Kom ihåg att*gör att listan packas upp. - Skriv ut PySpark-dataframens form i början och slutet genom att använda
count()för antalet poster ochlen()pådf.columnsrespektivenew_df.columnsför att få antalet kolumner.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
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.____)))