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
___