Supprimer les colonnes avec peu d'observations
Après beaucoup de feature engineering, il est bon de prendre du recul pour examiner ce que vous avez créé. Si vous avez utilisé des techniques d'automatisation sur vos variables catégorielles comme l'explosion ou le OneHot Encoding, vous pourriez maintenant vous retrouver avec des centaines de nouvelles variables binaires. La sélection de caractéristiques pourrait faire l'objet d'un cours complet, mais il existe quelques étapes rapides pour réduire la dimensionnalité de votre jeu de données.
Dans cet exercice, nous allons retirer les colonnes qui comptent moins de 30 observations. Trente est souvent considéré comme un minimum pour obtenir une signification statistique. En dessous de ce seuil, les relations mènent au surapprentissage par simple hasard !
NOTE : Les données sont disponibles dans le dataframe df.
Cette activité fait partie du cours
Ingénierie des caractéristiques avec PySpark
Instructions de l’exercice
- À l'aide de la boucle
forfournie qui parcourt la liste des colonnes binaires, calculez lasumdes valeurs de la colonne avec la fonctionagg. Utilisezcollect()pour exécuter immédiatement le calcul et enregistrez le résultat dansobs_count. - Comparez
obs_countàobs_threshold; l'énoncéifdoit être vrai siobs_countest inférieur ou égal àobs_threshold. - Supprimez les colonnes ajoutées à la liste
cols_to_removeen utilisantdrop(). Rappelez-vous que le*permet de décompresser la liste. - Affichez la forme initiale et finale des dataframes PySpark en utilisant
count()pour le nombre d'enregistrements etlen()surdf.columnsounew_df.columnspour obtenir le nombre de colonnes.
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
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.____)))