ทำไม xgboost จึงเร็วกว่า GradientBoostingClassifier ของ sklearn มาก?


29

ฉันพยายามที่จะฝึกอบรมการยกระดับความลาดชันของตัวอย่างมากกว่า 50k ด้วยคุณสมบัติตัวเลข 100 ตัว XGBClassifierจัดการ 500 ต้นภายใน 43 วินาทีบนเครื่องของฉันในขณะที่GradientBoostingClassifierจัดการเพียง 10 ต้น (!) ใน 1 นาทีและ 2 วินาที :( ฉันไม่ได้พยายามที่จะเติบโต 500 ต้นเพราะจะใช้เวลาหลายชั่วโมงฉันใช้แบบเดียวกันlearning_rateและmax_depthการตั้งค่า ดูด้านล่าง

อะไรทำให้ XGBoost เร็วขึ้นมาก? มันใช้การปรับแต่งแบบใหม่เพื่อส่งเสริมการไล่ระดับสีที่พวก sklearn ไม่รู้หรือไม่? หรือว่า "ตัดมุม" และปลูกต้นไม้ที่ตื้นขึ้น?

ป.ล. ฉันตระหนักถึงการสนทนานี้: https://www.kaggle.com/c/higgs-boson/forums/t/10335/xgboost-post-competition-surveyแต่ไม่สามารถหาคำตอบได้ที่นั่น ...

XGBClassifier(base_score=0.5, colsample_bylevel=1, colsample_bytree=1,
gamma=0, learning_rate=0.05, max_delta_step=0, max_depth=10,
min_child_weight=1, missing=None, n_estimators=500, nthread=-1,
objective='binary:logistic', reg_alpha=0, reg_lambda=1,
scale_pos_weight=1, seed=0, silent=True, subsample=1)

GradientBoostingClassifier(init=None, learning_rate=0.05, loss='deviance',
max_depth=10, max_features=None, max_leaf_nodes=None,
min_samples_leaf=1, min_samples_split=2,
min_weight_fraction_leaf=0.0, n_estimators=10,
presort='auto', random_state=None, subsample=1.0, verbose=0,
warm_start=False)

2
เดาเร็ว ๆ นี้ฉันจะต้องใช้ถ้อยคำใหม่เป็น "ทำไม LightGBM เร็วกว่า XGBoost มาก" :)
ihadanny

คำตอบ:


25

เนื่องจากคุณพูดถึงฟีเจอร์ "ตัวเลข" ฉันเดาว่าคุณสมบัติของคุณไม่ได้อยู่ในหมวดหมู่และมี arity สูง (พวกเขาสามารถใช้ค่าที่แตกต่างกันได้มากมาย ในกรณีเช่นนี้การปลูกต้นไม้เป็นเรื่องยากเนื่องจากมี [คุณสมบัติจำนวนมากคูณจุดแบ่งจำนวนมาก] เพื่อประเมิน×

ฉันเดาว่าผลที่ยิ่งใหญ่ที่สุดมาจากความจริงที่ว่า XGBoost ใช้การประมาณจุดแยก หากคุณมีคุณสมบัติต่อเนื่องที่มีการแยก 10,000 รายการที่เป็นไปได้ XGBoost พิจารณาเฉพาะ "การแยก" ที่ดีที่สุด "300 โดยค่าเริ่มต้น (นี่คือการทำให้เข้าใจง่าย) ลักษณะการทำงานนี้จะถูกควบคุมโดยsketch_epsพารามิเตอร์และคุณสามารถอ่านรายละเอียดเพิ่มเติมเกี่ยวกับเรื่องนี้ในเอกสาร คุณสามารถลองลดมันลงและตรวจสอบความแตกต่างที่เกิดขึ้นได้ เนื่องจากไม่มีการกล่าวถึงในเอกสารscikit-Learnฉันจึงเดาว่ามันไม่สามารถใช้ได้ คุณสามารถเรียนรู้ว่าวิธี XGBoost อยู่ในกระดาษของพวกเขา (arXiv)

XGBoost ยังใช้การประมาณค่าในการประเมินจุดแยกดังกล่าว ฉันไม่ทราบว่าเกณฑ์การเรียนรู้แบบใดที่ scikit กำลังประเมินการแยก แต่มันสามารถอธิบายส่วนที่เหลือของความแตกต่างของเวลา


ที่อยู่ความคิดเห็น

เกี่ยวกับการประเมินผลคะแนนแยก

อย่างไรก็ตามคุณหมายความว่าอย่างไร "XGBoost ใช้การประเมินจุดแยกเช่นนี้ด้วย" เท่าที่ฉันเข้าใจสำหรับการประเมินพวกเขาใช้การลดลงอย่างแม่นยำในฟังก์ชันวัตถุประสงค์ที่เหมาะสมตามที่ปรากฏใน eq (7) ในกระดาษ

ในการประเมินจุดแยกคุณจะต้องคำนวณโดยที่คือฟังก์ชันต้นทุน,เป้าหมาย,โมเดลที่สร้างขึ้นมาจนถึงตอนนี้และการเพิ่มปัจจุบัน โปรดสังเกตว่านี่ไม่ใช่สิ่งที่ XGBoost กำลังทำอยู่ พวกเขาลดความซับซ้อนของฟังก์ชั่นต้นทุนโดยการขยายตัวของเทย์เลอร์ซึ่งนำไปสู่การคำนวณที่ง่ายมาก พวกเขาต้องคำนวณ Gradient และ Hessian ของด้วยความเคารพต่อและพวกเขาสามารถนำตัวเลขเหล่านั้นกลับมาใช้ใหม่สำหรับการแบ่งที่อาจเกิดขึ้นทั้งหมดบนเวทีทำให้การคำนวณโดยรวมเร็วขึ้น คุณสามารถตรวจสอบL y H i - 1 h i L L H i - 1 iL(y,Hi1+hi)LyHi1hiLLHi1ผมฟังก์ชั่นการสูญเสียโดยประมาณด้วยการขยายตัวของเทย์เลอร์ (CrossValidated Q / A)สำหรับรายละเอียดเพิ่มเติมหรือที่มาในเอกสารของพวกเขา

ประเด็นคือพวกเขาพบวิธีประมาณอย่างมีประสิทธิภาพ หากคุณประเมินอย่างเต็มที่โดยปราศจากความรู้วงในทำให้การเพิ่มประสิทธิภาพหรือหลีกเลี่ยงหรือการคำนวณซ้ำซ้อนจะใช้เวลามากขึ้นต่อการแยก มันเกี่ยวกับเรื่องนี้มันเป็นประมาณ อย่างไรก็ตามการปรับใช้การไล่ระดับสีอื่น ๆ ยังใช้ฟังก์ชันต้นทุนพร็อกซีเพื่อประเมินการแยกและฉันไม่ทราบว่าการประมาณ XGBoost นั้นเร็วกว่าในเรื่องนี้หรือไม่LL(Y,Hผม-1+ชั่วโมงผม)L


ขอบคุณ @ วิงค์ฉันอ่านกระดาษและดูว่าคุณหมายถึงอะไรโดยอัลกอริทึมการประมาณสำหรับการเลือกผู้สมัครแยก อย่างไรก็ตามคุณหมายความว่าอย่างไร "XGBoost ใช้การประเมินจุดแยกเช่นนี้ด้วย" เท่าที่ฉันเข้าใจสำหรับการประเมินพวกเขาใช้การลดลงอย่างแม่นยำในฟังก์ชันวัตถุประสงค์ที่เหมาะสมตามที่ปรากฏใน eq (7) ในกระดาษ
ihadanny

ฉันแก้ไขคำตอบเพื่อแสดงความคิดเห็นของคุณ ตรวจสอบQ / A นี้สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับการประเมินคะแนนแยก
วิงค์

ขอบคุณมาก @ วิงก์! จะดีถ้าคุณยังสามารถตอบคำถามเพิ่มเติมของฉันได้ที่นี่: datascience.stackexchange.com/q/10997/16050
ihadanny

นี่คือคำตอบที่ดี แฮตทริค!
eliasah
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.