เมื่อใดก็ตามที่ฉันทำงานกับ xgboost ฉันมักจะทำการค้นหาพารามิเตอร์ homebrew ของตัวเอง แต่คุณสามารถทำได้ด้วยชุดคาเร็ตและ KrisP ที่เพิ่งพูดถึง
- เครื่องหมายตก
ดูคำตอบนี้ในการตรวจสอบข้ามสำหรับคำอธิบายอย่างละเอียดเกี่ยวกับวิธีการใช้ชุดคาเร็ตสำหรับการค้นหาพารามิเตอร์ใน xgboost
วิธีการปรับค่าพารามิเตอร์ไฮเปอร์ของต้น xgboost?
- ค้นหากริดที่กำหนดเอง
ฉันมักจะเริ่มต้นด้วยสมมติฐานบางอย่างจากสไลด์ของโอเว่นจางเกี่ยวกับเคล็ดลับสำหรับวิทยาศาสตร์ข้อมูลหน้า 14
ที่นี่คุณจะเห็นว่าส่วนใหญ่คุณจะต้องปรับแต่งการสุ่มแถวการสุ่มคอลัมน์และความลึกสูงสุดของต้นไม้ นี่คือวิธีที่ฉันทำการสุ่มตัวอย่างแถวที่กำหนดเองและการสุ่มตัวอย่างคอลัมน์เพื่อค้นหาปัญหาที่ฉันกำลังทำอยู่ในขณะนี้:
searchGridSubCol <- expand.grid(subsample = c(0.5, 0.75, 1),
colsample_bytree = c(0.6, 0.8, 1))
ntrees <- 100
#Build a xgb.DMatrix object
DMMatrixTrain <- xgb.DMatrix(data = yourMatrix, label = yourTarget)
rmseErrorsHyperparameters <- apply(searchGridSubCol, 1, function(parameterList){
#Extract Parameters to test
currentSubsampleRate <- parameterList[["subsample"]]
currentColsampleRate <- parameterList[["colsample_bytree"]]
xgboostModelCV <- xgb.cv(data = DMMatrixTrain, nrounds = ntrees, nfold = 5, showsd = TRUE,
metrics = "rmse", verbose = TRUE, "eval_metric" = "rmse",
"objective" = "reg:linear", "max.depth" = 15, "eta" = 2/ntrees,
"subsample" = currentSubsampleRate, "colsample_bytree" = currentColsampleRate)
xvalidationScores <- as.data.frame(xgboostModelCV)
#Save rmse of the last iteration
rmse <- tail(xvalidationScores$test.rmse.mean, 1)
return(c(rmse, currentSubsampleRate, currentColsampleRate))
})
และเมื่อรวมกับเวทมนตร์ ggplot2 บางส่วนโดยใช้ผลลัพธ์ของฟังก์ชั่นการใช้งานนั้นคุณสามารถพล็อตการแสดงภาพกราฟิกของการค้นหา
ในพล็อตสีที่เบากว่านี้แสดงถึงข้อผิดพลาดที่ต่ำกว่าและแต่ละบล็อกแสดงถึงการรวมกันที่ไม่ซ้ำกันของการสุ่มตัวอย่างคอลัมน์และการสุ่มตัวอย่างแถว ดังนั้นหากคุณต้องการทำการค้นหาเพิ่มเติมของ say eta (หรือความลึกของต้นไม้) คุณจะพบกับหนึ่งในแผนการเหล่านี้สำหรับแต่ละพารามิเตอร์ของการทดสอบ eta
ฉันเห็นว่าคุณมีตัวชี้วัดการประเมินผลที่แตกต่างกัน (RMPSE) เพียงแค่เสียบเข้าไปในฟังก์ชันการตรวจสอบความถูกต้องแบบไขว้และคุณจะได้ผลลัพธ์ที่ต้องการ นอกจากนั้นฉันไม่ต้องกังวลมากเกินไปเกี่ยวกับการปรับพารามิเตอร์อื่น ๆ อย่างละเอียดเพราะการทำเช่นนั้นจะไม่ปรับปรุงประสิทธิภาพมากเกินไปอย่างน้อยก็ไม่มากเมื่อเทียบกับการใช้เวลาคุณสมบัติด้านวิศวกรรมมากขึ้นหรือการล้างข้อมูล
- คนอื่น ๆ
การค้นหาแบบสุ่มและการเลือกพารามิเตอร์แบบเบย์ก็เป็นไปได้เช่นกัน แต่ฉันยังไม่ได้ทำการค้นหา
นี่คือไพรเมอร์ที่ดีเกี่ยวกับการเพิ่มประสิทธิภาพแบบเบย์ของพารามิเตอร์โดย Max Kuhn ผู้สร้างคาเร็ต
http://blog.revolutionanalytics.com/2016/06/bayesian-optimization-of-machine-learning-models.html