Hachage de caractéristiques et LabelPoint
Après avoir séparé les courriels en mots, nos jeux de données bruts « spam » et « non-spam » sont actuellement composés de messages d'une seule ligne. Pour classer ces messages, nous devons convertir le texte en caractéristiques.
Dans la deuxième partie de l'exercice, vous allez d'abord créer une instance de HashingTF() pour mapper le texte vers des vecteurs de 200 caractéristiques. Ensuite, pour chaque message des fichiers « spam » et « non-spam », vous les diviserez en mots et associerez chaque mot à une caractéristique. Ce sont ces caractéristiques qui serviront à déterminer si un message est « spam » ou « non-spam ». Ensuite, vous créerez des étiquettes pour les caractéristiques. Pour un message valide, l'étiquette sera 0 (c.-à-d. que le message n'est pas du pourriel) et pour un message « spam », l'étiquette sera 1 (c.-à-d. que le message est du pourriel). Enfin, vous combinerez les deux jeux de données étiquetés.
N'oubliez pas que vous avez un SparkContext sc disponible dans votre espace de travail. Les variables spam_words et non_spam_words sont aussi déjà disponibles.
Cette activité fait partie du cours
Principes de Big Data avec PySpark
Instructions de l’exercice
- Créez une instance de
HashingTF()pour mapper le texte des courriels vers des vecteurs de 200 caractéristiques. - Chaque message des jeux de données « spam » et « non-spam » est divisé en mots, et chaque mot est associé à une caractéristique.
- Assignez les étiquettes aux caractéristiques : 1 pour le pourriel, 0 pour le non-pourriel.
- Combinez les échantillons « spam » et « non-spam » en un seul jeu de données.
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
# Create a HashingTF instance with 200 features
tf = ____(numFeatures=200)
# Map each word to one feature
spam_features = tf.____(spam_words)
non_spam_features = tf.____(____)
# Label the features: 1 for spam, 0 for non-spam
spam_samples = spam_features.map(lambda features:LabeledPoint(____, features))
non_spam_samples = non_spam_features.map(lambda features:_____(____, features))
# Combine the two datasets
samples = spam_samples.____(non_spam_samples)