Eliminarea coloanelor cu puține observații
După ce ai realizat multă inginerie a caracteristicilor, este o idee bună să faci un pas înapoi și să analizezi ce ai creat. Dacă ai aplicat tehnici de automatizare pe caracteristicile categorice – precum explodarea sau codificarea OneHot – s-ar putea să ai acum sute de noi caracteristici binare. Deși selecția caracteristicilor este subiectul unui alt curs, există câțiva pași rapizi pe care îi poți face pentru a reduce dimensionalitatea setului de date.
În acest exercițiu, vom elimina coloanele care au mai puțin de 30 de observații. 30 este numărul minim uzual de observații pentru semnificație statistică. Sub această valoare, relațiile duc la supraajustare din simplă coincidență!
NOTĂ: Datele sunt disponibile în dataframe-ul df.
Acest exercițiu face parte din cursul
Feature Engineering cu PySpark
Instrucțiuni pentru exercițiu
- Folosind bucla
forfurnizată, care iterează prin lista coloanelor binare, calculeazăsum-ul valorilor din coloană cu ajutorul funcțieiagg. Foloseștecollect()pentru a rula calculul imediat și salvează rezultatele înobs_count. - Compară
obs_countcuobs_threshold; instrucțiuneaiftrebuie să fie adevărată dacăobs_counteste mai mică sau egală cuobs_threshold. - Elimină coloanele adăugate în lista
cols_to_removefolosinddrop(). Reține că*permite despachetarea listei. - Afișează forma inițială și finală a dataframe-urilor PySpark folosind
count()pentru numărul de înregistrări șilen()pedf.columnssaunew_df.columnspentru numărul de coloane.
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
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.____)))