Feature hashing và LabelPoint
Sau khi tách email thành các từ, các tập dữ liệu thô 'spam' và 'non-spam' hiện gồm các thông điệp 1 dòng. Để phân loại các thông điệp này, chúng ta cần chuyển văn bản thành các feature.
Trong phần hai của bài tập, bạn sẽ tạo một thể hiện HashingTF() để ánh xạ văn bản thành các vector gồm 200 feature. Sau đó, với mỗi thông điệp trong các tệp 'spam' và 'non-spam', bạn sẽ tách chúng thành các từ và ánh xạ mỗi từ thành một feature. Đây là các feature sẽ được dùng để quyết định một thông điệp là 'spam' hay 'non-spam'. Tiếp theo, bạn sẽ tạo nhãn cho các feature. Với thông điệp hợp lệ, nhãn sẽ là 0 (tức thông điệp không phải spam) và với thông điệp 'spam', nhãn sẽ là 1 (tức thông điệp là spam). Cuối cùng, bạn sẽ gộp cả hai tập dữ liệu đã gán nhãn.
Lưu ý, bạn có SparkContext sc trong không gian làm việc. Các biến spam_words và non_spam_words cũng đã có sẵn.
Bài tập này là một phần của khóa học
Nền tảng Big Data với PySpark
Hướng dẫn bài tập
- Tạo một thể hiện
HashingTF()để ánh xạ văn bản email thành các vector gồm 200 feature. - Mỗi thông điệp trong các tập 'spam' và 'non-spam' được tách thành các từ, và mỗi từ được ánh xạ thành một feature.
- Gán nhãn cho các feature: 1 cho spam, 0 cho non-spam.
- Gộp cả mẫu spam và non-spam thành một tập dữ liệu duy nhất.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
# 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)