การแบ่งพาร์ติชันข้อมูลโดยคำนึงถึงผลกระทบจากศิลปิน
ก่อนจะรันโมเดลใดก็ตาม จำเป็นต้องแบ่งข้อมูลออกเป็นชุดฝึก (training) และชุดทดสอบ (testing) ก่อน อย่างไรก็ตาม ชุดข้อมูลนี้มีความซับซ้อนที่ทำให้ไม่สามารถเรียก sdf_random_split() ได้โดยตรง ปัญหาคือแต่ละเพลงของศิลปินคนเดียวกันควรอยู่ในชุดเดียวกัน เพราะถ้าเพลงของศิลปินคนหนึ่งถูกใช้ในการฝึกโมเดลแล้วยังไปปรากฏในชุดทดสอบด้วย จะทำให้โมเดลดูแม่นยำกว่าความเป็นจริง
วิธีแก้คือแบ่งพาร์ติชันเฉพาะ artist ID ก่อน แล้วค่อย inner join ID ที่แบ่งแล้วกลับเข้ากับชุดข้อมูลเดิม ทั้งนี้ artist_id เชื่อถือได้มากกว่า artist_name สำหรับการแบ่งพาร์ติชัน เนื่องจากศิลปินบางคนใช้ชื่อที่แตกต่างกันในแต่ละเพลง ตัวอย่างเช่น Duke Ellington บางครั้งใช้ชื่อว่า "Duke Ellington" แต่บางครั้งก็ใช้ "Duke Ellington & His Orchestra" หรือรูปแบบการสะกดอื่นๆ อีกหลายแบบ
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
แนะนำ Spark ด้วย sparklyr ใน R
คำแนะนำการฝึกหัด
ระบบได้สร้าง Spark connection ไว้ให้แล้วในชื่อ spark_conn และได้กำหนด tibble ที่เชื่อมต่อกับข้อมูล track metadata และ timbre ที่รวมและกรองแล้วซึ่งเก็บอยู่ใน Spark ไว้ในชื่อ track_data_tbl
- แบ่งพาร์ติชัน artist ID ออกเป็นชุดฝึกและชุดทดสอบ แล้วเก็บผลลัพธ์ไว้ใน
training_testing_artist_ids- เลือกคอลัมน์
artist_idจากtrack_data_tbl - ดึงแถวที่ไม่ซ้ำกัน
- แบ่งข้อมูลเป็น 70% สำหรับชุดฝึก และ 30% สำหรับชุดทดสอบ
- เลือกคอลัมน์
- Inner join ชุดฝึกกับ
track_data_tblโดยใช้artist_idแล้วเก็บผลลัพธ์ไว้ในtrack_data_to_model_tbl - Inner join ชุดทดสอบกับ
track_data_tblโดยใช้artist_idแล้วเก็บผลลัพธ์ไว้ในtrack_data_to_predict_tbl
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# track_data_tbl has been pre-defined
track_data_tbl
training_testing_artist_ids <- track_data_tbl %>%
# Select the artist ID
___ %>%
# Get distinct rows
___ %>%
# Partition into training/testing sets
___
track_data_to_model_tbl <- track_data_tbl %>%
# Inner join to training partition
___
track_data_to_predict_tbl <- track_data_tbl %>%
# Inner join to testing partition
___