Feature Hashing และ LabeledPoint
หลังจากแบ่งอีเมลออกเป็นคำแล้ว ชุดข้อมูลดิบ 'spam' และ 'non-spam' ในปัจจุบันประกอบด้วยข้อความบรรทัดเดียว เพื่อจำแนกประเภทข้อความเหล่านี้ เราต้องแปลงข้อความให้เป็น feature ก่อน
ในส่วนที่สองของแบบฝึกหัดนี้ จะเริ่มด้วยการสร้างอินสแตนซ์ HashingTF() เพื่อแมปข้อความให้เป็นเวกเตอร์ที่มี 200 feature จากนั้นสำหรับแต่ละข้อความในไฟล์ 'spam' และ 'non-spam' ให้แบ่งข้อความออกเป็นคำ แล้วแมปแต่ละคำไปยัง feature หนึ่งตัว ซึ่ง feature เหล่านี้จะถูกนำไปใช้ตัดสินว่าข้อความนั้นเป็น 'spam' หรือ 'non-spam' ต่อมาให้กำหนด label ให้กับ feature โดยข้อความปกติจะมี label เป็น 0 (หมายความว่าไม่ใช่ spam) และข้อความ 'spam' จะมี label เป็น 1 (หมายความว่าเป็น spam) สุดท้ายให้รวมชุดข้อมูลที่มี label แล้วทั้งสองชุดเข้าด้วยกัน
ข้อควรจำ: มี SparkContext sc พร้อมใช้งานใน workspace ของคุณ รวมถึงตัวแปร spam_words และ non_spam_words ก็พร้อมใช้งานแล้วเช่นกัน
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Big Data Fundamentals with PySpark
คำแนะนำการฝึกหัด
- สร้างอินสแตนซ์
HashingTF()เพื่อแมปข้อความอีเมลให้เป็นเวกเตอร์ที่มี 200 feature - แบ่งแต่ละข้อความในชุดข้อมูล 'spam' และ 'non-spam' ออกเป็นคำ แล้วแมปแต่ละคำไปยัง feature หนึ่งตัว
- กำหนด label ให้กับ feature โดย 1 สำหรับ spam และ 0 สำหรับ non-spam
- รวมตัวอย่างข้อมูล spam และ non-spam ทั้งหมดเข้าเป็นชุดข้อมูลเดียว
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# 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)