Cordes et facteurs
Comme vous le savez, Spark a besoin de données numériques pour la modélisation. Jusqu'à présent, cela n'a pas posé de problème ; même les colonnes booléennes peuvent être converties en nombres entiers sans difficulté. Mais vous utiliserez également la compagnie aérienne et la destination de l'avion comme éléments de votre modèle. Ils sont codés sous forme de chaînes de caractères et il n'y a pas de moyen évident de les convertir en un type de données numériques.
Heureusement, PySpark dispose de fonctions pour gérer cela dans le sous-module pyspark.ml.features
. Vous pouvez créer ce que l'on appelle des "vecteurs à un coup" pour représenter le transporteur et la destination de chaque vol. Un vecteur à un point est une manière de représenter une caractéristique catégorielle où chaque observation a un vecteur dans lequel tous les éléments sont à zéro sauf un élément au plus, qui a une valeur de un (1).
Chaque élément du vecteur correspond à un niveau de la caractéristique, de sorte qu'il est possible de déterminer le bon niveau en voyant quel élément du vecteur est égal à un (1).
La première étape de l'encodage de votre caractéristique catégorielle consiste à créer un site StringIndexer
. Les membres de cette classe sont Estimator
s qui prennent un DataFrame avec une colonne de chaînes de caractères et font correspondre chaque chaîne unique à un nombre. Ensuite, le site Estimator
renvoie un site Transformer
qui prend un DataFrame, y attache la correspondance en tant que métadonnées et renvoie un nouveau DataFrame avec une colonne numérique correspondant à la colonne de la chaîne.
La deuxième étape consiste à coder cette colonne numérique sous la forme d'un vecteur à un coup à l'aide d'une adresse OneHotEncoder
. Cela fonctionne exactement de la même manière que pour StringIndexer
en créant un Estimator
puis un Transformer
. Le résultat final est une colonne qui code votre caractéristique catégorielle sous la forme d'un vecteur adapté aux routines d'apprentissage automatique !
Cela peut sembler compliqué, mais ne vous inquiétez pas ! Tout ce dont vous devez vous souvenir, c'est que vous devez créer un StringIndexer
et un OneHotEncoder
, et que le Pipeline
s'occupera du reste.
Pourquoi devez-vous coder une caractéristique catégorielle sous la forme d'un vecteur à un seul point ?
Cet exercice fait partie du cours
Introduction à PySpark
Exercice interactif pratique
Passez de la théorie à la pratique avec l’un de nos exercices interactifs
