Chaînes et facteurs
Comme vous le savez, Spark nécessite des 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 facilement converties en entiers sans difficulté. Cependant, vous utiliserez également la compagnie aérienne et la destination de l'avion comme caractéristiques dans votre modèle. Ces données sont codées sous forme de chaînes et il n'existe aucun moyen évident de les convertir en un type de données numériques.
Heureusement, PySpark dispose de fonctions intégrées dans le sous-module pyspark.ml.features pour gérer cela. Vous pouvez créer ce que l'on appelle des « vecteurs one-hot » pour représenter le transporteur et la destination de chaque vol. Un vecteur one-hot est une méthode de représentation d'une caractéristique catégorielle dans laquelle chaque observation possède un vecteur dont tous les éléments sont nuls, à l'exception d'un élément au maximum, qui a une valeur de un (1).
Chaque élément du vecteur correspond à un niveau de la caractéristique, il est donc possible de déterminer quel est le niveau correct en observant quel élément du vecteur est égal à un (1).
La première étape pour encoder votre caractéristique catégorielle consiste à créer un objet StringIndexer. Les membres de cette classe sont des objets de type Estimator qui prennent un DataFrame avec une colonne de chaînes et associent chaque chaîne unique à un nombre. Ensuite, Estimator renvoie une méthode Transformer qui prend un DataFrame, y attache le mappage en tant que métadonnées et renvoie un nouveau DataFrame avec une colonne numérique correspondant à la colonne de chaîne.
La deuxième étape consiste à encoder cette colonne numérique sous forme de vecteur one-hot à l'aide d'un OneHotEncoder. Cela fonctionne exactement de la même manière que StringIndexer, en créant un Estimator puis un Transformer. Le résultat final est une colonne qui encode votre caractéristique catégorielle sous forme de vecteur adapté aux routines de machine learning.
Cela peut sembler complexe, mais ne vous inquiétez pas. Il est important de noter que vous devez créer un StringIndexer et un OneHotEncoder, et Pipeline se chargera du reste.
Pourquoi est-il nécessaire de coder une caractéristique catégorielle sous forme de vecteur one-hot ?
Cet exercice fait partie du cours
<cours>Principes fondamentaux de PySpark</cours>Exercice interactif pratique
Transformez la théorie en action avec l’un de nos exercices interactifs
Commencer l’exercice