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

Gradient Boosted Trees: การสร้างโมเดล

Gradient boosting เป็นเทคนิคที่ใช้เพิ่มประสิทธิภาพของโมเดลอื่น แนวคิดคือการรันโมเดลที่ค่อนข้างอ่อนแต่คำนวณได้ง่ายก่อน จากนั้นจึงแทนที่ค่า response ด้วยค่า residual จากโมเดลนั้น แล้วฟิตโมเดลใหม่อีกครั้ง การ "บวกรวม" โมเดลทำนาย response เดิมกับโมเดลทำนาย residual ใหม่เข้าด้วยกัน จะได้โมเดลที่แม่นยำยิ่งขึ้น กระบวนการนี้สามารถทำซ้ำได้เรื่อย ๆ โดยรันโมเดลใหม่เพื่อทำนาย residual ของโมเดลก่อนหน้า แล้วนำผลลัพธ์มารวมกัน โมเดลจะแข็งแกร่งขึ้นในทุกรอบที่ทำซ้ำ

เพื่อให้เห็นภาพชัดขึ้น sparklyr ใช้ gradient boosted trees ซึ่งหมายถึงการทำ gradient boosting โดยใช้ decision trees เป็นโมเดลที่อ่อนแต่คำนวณง่าย เทคนิคนี้ใช้ได้ทั้งกับปัญหาการจำแนกประเภท (classification — เมื่อตัวแปร response เป็นแบบหมวดหมู่) และปัญหาการถดถอย (regression — เมื่อตัวแปร response เป็นแบบต่อเนื่อง) ในกรณี regression ที่จะใช้ที่นี่ ตัวชี้วัดว่าจุดข้อมูลนั้นฟิตได้ไม่ดีเพียงใดคือค่า residual

Decision trees อธิบายไว้อย่างละเอียดในคอร์ส Supervised Learning in R: Classification และ Supervised Learning in R: Regression โดยคอร์สหลังครอบคลุมเรื่อง gradient boosting ด้วย

หากต้องการรันโมเดล gradient boosted trees ใน sparklyr ให้เรียกใช้ ml_gradient_boosted_trees() การใช้งานฟังก์ชันนี้ได้อธิบายไว้แล้วในแบบฝึกหัดแรกของบทนี้

แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร

แนะนำ Spark ด้วย sparklyr ใน R

ดูคอร์ส

คำแนะนำการฝึกหัด

มีการสร้าง Spark connection ไว้ให้แล้วในชื่อ spark_conn และกำหนด tibble ที่เชื่อมต่อกับข้อมูล metadata/timbre ของแทร็กที่รวมและกรองแล้วซึ่งเก็บอยู่ใน Spark ไว้ล่วงหน้าในชื่อ track_data_to_model_tbl

  • ดึงคอลัมน์ที่มีสตริง "timbre" เพื่อใช้เป็นฟีเจอร์
    • ใช้ colnames() เพื่อดึงชื่อคอลัมน์ของ track_data_to_model_tbl หมายเหตุ: names() จะไม่ให้ผลลัพธ์ที่ต้องการ
    • ใช้ str_subset() เพื่อกรองคอลัมน์
    • อาร์กิวเมนต์ pattern ของฟังก์ชันนั้นควรเป็น fixed("timbre")
    • กำหนดผลลัพธ์ให้กับ feature_colnames
  • สร้าง formula สำหรับโมเดลโดยใช้ reformulate()
    • อาร์กิวเมนต์ termlabels (input ของ formula) ควรเป็น feature_colnames
    • อาร์กิวเมนต์ response (output ของ formula) ควรเป็น "year"
    • กำหนดผลลัพธ์ให้กับ year_formula
    • การใช้ reformulate() แบบนี้จะรวมตัวแปรทั้งหมดใน feature_colnames ด้วยเครื่องหมาย + เพื่อสร้างส่วนขวามือของ formula ซึ่งได้ formula ในรูปแบบ year ~ timbre1 + timbre2 + ... + timbre12 ที่กำหนดความสัมพันธ์ระหว่างตัวแปรที่จะรวมไว้ในโมเดล
  • รันโมเดล gradient boosting
    • เรียก ml_gradient_boosted_trees() โดยใช้ year_formula ที่สร้างไว้เป็นอาร์กิวเมนต์เดียว
    • กำหนดผลลัพธ์ให้กับ gradient_boosted_trees_model

แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ

ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์

# track_data_to_model_tbl has been pre-defined
track_data_to_model_tbl

feature_colnames <- track_data_to_model_tbl %>%
  # Get the column names
  ___ %>%
  # Limit to the timbre columns
  ___(___(___))

feature_colnames

# Create the formula for the model
year_formula <- ___

gradient_boosted_trees_model <- track_data_to_model_tbl %>%
  # Run the gradient boosted trees model
  ___
แก้ไขและรันโค้ด