เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

การแบ่งพาร์ติชันข้อมูลโดยคำนึงถึงผลกระทบจากศิลปิน

ก่อนจะรันโมเดลใดก็ตาม จำเป็นต้องแบ่งข้อมูลออกเป็นชุดฝึก (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
  ___
แก้ไขและรันโค้ด