Hachage de caractéristiques et LabelPoint
Après avoir divisé les e-mails en mots, nos ensembles de données brutes « spam » et « non-spam » sont actuellement composés de messages d'une 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 HashingTF()
pour mettre en correspondance du texte avec 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 seront utilisées pour décider si un message est indésirable (« spam ») ou pas (« non-spam »). Vous créerez ensuite des étiquettes pour les caractéristiques. Pour un message valide, l'étiquette sera 0 (c'est-à-dire que le message n'est pas indésirable) et pour un message « spam », l'étiquette sera 1 (c'est-à-dire que le message est un spam). Enfin, vous combinerez les deux ensembles de données étiquetées.
Rappelez-vous qu’un SparkContext sc
est déjà disponible dans votre espace de travail. Les variables spam_words
et non_spam_words
sont également déjà disponibles dans votre espace de travail.
Cet exercice fait partie du cours
Principes fondamentaux des mégadonnées avec PySpark
Instructions
- Créez une instance
HashingTF()
pour mapper le texte d'un e-mail avec des vecteurs de 200 caractéristiques. - Chaque message des ensembles de données « spam » et « non-spam » est divisé en mots, et chaque mot est associé à une caractéristique.
- Étiquetez les caractéristiques : 1 pour le spam, 0 pour le non-spam.
- Combinez les échantillons de spam et de non-spam en un même ensemble de données.
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
# 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)