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

หาจำนวนต้นไม้ที่เหมาะสมสำหรับ gradient boosting machine

ในแบบฝึกหัดนี้ เราจะเตรียมสร้างโมเดล gradient boosting เพื่อพยากรณ์จำนวนจักรยานที่ถูกเช่าในแต่ละชั่วโมง โดยอิงจากสภาพอากาศ ประเภทของวัน และช่วงเวลา โมเดลจะถูก train ด้วยข้อมูลจากเดือนกรกฎาคม

ข้อมูลเดือนกรกฎาคมถูกโหลดไว้ให้แล้ว โปรดจำไว้ว่า bikesJuly.treat ไม่มีคอลัมน์ outcome แล้ว จึงต้องดึงค่านั้นจากข้อมูลดิบ: bikesJuly$cnt

เราจะใช้แพ็กเกจ xgboost ในการ fit โมเดล ฟังก์ชัน xgb.cv() (docs) ใช้ cross-validation เพื่อประมาณค่า learning error บนข้อมูลนอกกลุ่มตัวอย่างเมื่อมีการเพิ่มต้นไม้แต่ละต้นเข้าสู่โมเดล จำนวนต้นไม้ที่เหมาะสมสำหรับโมเดลสุดท้ายคือจำนวนที่ทำให้ holdout RMSE ต่ำที่สุด

สำหรับแบบฝึกหัดนี้ อาร์กิวเมนต์หลักของ xgb.cv() มีดังนี้

  • data: numeric matrix
  • label: vector ของค่า outcome (ต้องเป็น numeric เช่นกัน)
  • nrounds: จำนวน round สูงสุด (จำนวนต้นไม้ที่จะสร้าง)
  • nfold: จำนวน fold สำหรับ cross-validation โดย 5 เป็นค่าที่เหมาะสม
  • objective: "reg:squarederror" สำหรับ outcome ที่เป็นค่าต่อเนื่อง
  • eta: learning rate
  • max_depth: ความลึกสูงสุดของต้นไม้
  • early_stopping_rounds: หยุดการ train หากผ่านไปตามจำนวน round นี้โดยไม่มีการพัฒนาขึ้น
  • verbose: FALSE เพื่อไม่ให้แสดงผลระหว่างการรัน

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

Supervised Learning ใน R: การถดถอย

ดูคอร์ส

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

  • เติมช่องว่างเพื่อรัน xgb.cv() กับข้อมูล training ที่ผ่านการ treat แล้ว จากนั้น assign ผลลัพธ์ไปยังตัวแปร cv
    • ใช้ as.matrix() เพื่อแปลง data frame ที่ผ่านการ treat ให้เป็น matrix
    • ใช้ 50 rounds และ cross-validation แบบ 5-fold
    • ตั้งค่า early_stopping_rounds เป็น 5
    • ตั้งค่า eta เป็น 0.75 และ max_depth เป็น 5
  • ดึง data frame evaluation_log จาก cv แล้ว assign ไปยังตัวแปร elog โดยแต่ละแถวของ evaluation_log จะตรงกับต้นไม้ที่ถูกเพิ่มเข้ามาหนึ่งต้น ดังนั้นหมายเลขแถวจะบอกจำนวนต้นไม้ในโมเดล
  • เติมช่องว่างเพื่อหาจำนวนต้นไม้ที่ให้ค่าต่ำที่สุดของคอลัมน์ train_rmse_mean และ test_rmse_mean
    • which.min() (docs) จะคืนค่า index ของค่าต่ำสุดใน vector
    • ต้องการต้นไม้กี่ต้น?

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

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

# Run xgb.cv
cv <- xgb.cv(data = ____, 
            label = ___,
            nrounds = ___,
            nfold = ___,
            objective = "reg:squarederror",
            eta = ___,
            max_depth = ___,
            early_stopping_rounds = ___,
            verbose = FALSE   # silent
)

# Get the evaluation log 
elog <- ___

# Determine and print how many trees minimize training and test error
elog %>% 
   summarize(ntrees.train = ___,   # find the index of min(train_rmse_mean)
             ntrees.test  = ___)   # find the index of min(test_rmse_mean)
แก้ไขและรันโค้ด