LightGBM และ CatBoost
เหตุใด LightGBM จึงเร็วกว่า การแบ่งแบบใช้ฮิสโตแกรม และ CatBoost สำหรับคุณลักษณะเชิงหมวดหมู่
LightGBM และ CatBoost เป็นบทเรียน Learn AI with Python ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Learn AI with Python และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน
ก้าวต่อจากเอ็กซ์จีบูสต์
เอ็กซ์จีบูสต์มีประสิทธิภาพสูง แต่การทำงานกับชุดข้อมูลขนาดใหญ่มากอาจช้า LightGBM และ CatBoost เป็นไลบรารีการบูสต์แบบเกรเดียนต์รุ่นใหม่กว่าที่ช่วยเพิ่มความเร็วและจัดการข้อมูลเชิงหมวดหมู่ได้อย่างเหมาะสมยิ่งขึ้น
การแบ่งโดยใช้ฮิสโตแกรม
LightGBM จัดกลุ่มคุณลักษณะต่อเนื่องลงในช่วงค่าที่ไม่ต่อเนื่อง (ฮิสโตแกรม) ก่อนค้นหาจุดแบ่ง วิธีนี้ทำให้ค้นหาจุดแบ่งได้เร็วขึ้นมากและใช้หน่วยความจำน้อยกว่าวิธีแบบตรง
การเติบโตของต้นไม้แบบแยกตามใบ
ต่างจากการเติบโตแบบแยกตามระดับ LightGBM จะเติบโตแบบแยกตามใบ โดยแบ่งใบที่ช่วยลดการสูญเสียได้มากที่สุดก่อน วิธีนี้ลู่เข้าได้เร็วกว่า แต่ก็อาจทำให้เกิดการเรียนรู้เกินจริง จึงควบคุมด้วย num_leaves
ตัวจำแนกประเภทของ LightGBM และจำนวนใบ
num_leaves เป็นพารามิเตอร์ควบคุมความซับซ้อนที่สำคัญที่สุดของ LightGBM ค่าที่มากขึ้นจะเพิ่มความแม่นยำ แต่เพิ่มความเสี่ยงต่อการเรียนรู้เกินจริง หลักทั่วไปคือควรรักษาให้ num_leaves < 2^max_depth
from lightgbm import LGBMClassifier
model = LGBMClassifier(
n_estimators=300,
num_leaves=31,
learning_rate=0.05,
random_state=0,
)
model.fit(Xtr, ytr)
print(model.score(Xte, yte))ข้อได้เปรียบด้านความเร็วของ LightGBM
ด้วยการจัดกลุ่มเป็นช่วงแบบฮิสโตแกรม การเติบโตแบบแยกตามใบ และการสุ่มเลือกคุณลักษณะหรือข้อมูลย่อย LightGBM จึงฝึกได้เร็วกว่าเอ็กซ์จีบูสต์อย่างเห็นได้ชัดบนชุดข้อมูลขนาดใหญ่ และมักให้ความแม่นยำใกล้เคียงกัน
from lightgbm import LGBMClassifier
model = LGBMClassifier(
n_estimators=1000,
num_leaves=63,
learning_rate=0.03,
feature_fraction=0.8,
bagging_fraction=0.8,
)การหยุดก่อนกำหนดใน LightGBM
LightGBM รองรับการหยุดก่อนกำหนดผ่านฟังก์ชันเรียกกลับ ให้ส่งชุดข้อมูลประเมินและฟังก์ชันเรียกกลับ early_stopping เพื่อหยุดเมื่อค่าตัวชี้วัดไม่เปลี่ยนแปลง
import lightgbm as lgb
from lightgbm import LGBMClassifier
model = LGBMClassifier(n_estimators=2000, learning_rate=0.03)
model.fit(
Xtr, ytr,
eval_set=[(Xte, yte)],
callbacks=[lgb.early_stopping(50)],
)CatBoost กับคุณลักษณะเชิงหมวดหมู่
CatBoost โดดเด่นเมื่อใช้กับข้อมูลเชิงหมวดหมู่ คุณส่งคอลัมน์เชิงหมวดหมู่ดิบโดยตรงผ่าน cat_features ได้ โดยไม่จำเป็นต้องเข้ารหัสด้วยตนเอง
ภายในจะใช้สถิติเป้าหมายแบบเรียงลำดับเพื่อหลีกเลี่ยงการรั่วไหลของเป้าหมาย
from catboost import CatBoostClassifier
model = CatBoostClassifier(
iterations=500,
learning_rate=0.05,
depth=6,
verbose=False,
)
model.fit(Xtr, ytr, cat_features=[0, 3, 5])เหตุใดการไม่เข้ารหัสจึงมีประสิทธิภาพ
สำหรับไลบรารีอื่น คุณต้องเข้ารหัสหมวดหมู่แบบวัน-ฮอตหรือแบบป้ายกำกับ ซึ่งอาจทำให้จำนวนมิติเพิ่มขึ้นอย่างมากหรือทำให้เป้าหมายรั่วไหล CatBoost จัดการเรื่องนี้ภายในด้วยการบูสต์แบบเรียงลำดับ จึงช่วยลดการเรียนรู้เกินจริงของคุณลักษณะเชิงหมวดหมู่
พารามิเตอร์สำคัญของ CatBoost
CatBoost ใช้ iterations (คล้ายกับจำนวนตัวประมาณ), learning_rate และ depth (สร้างต้นไม้สมมาตร) โดยมักทำงานได้ดีแม้ปรับแต่งเพียงเล็กน้อย
from catboost import CatBoostClassifier
model = CatBoostClassifier(
iterations=1000,
learning_rate=0.03,
depth=8,
l2_leaf_reg=3.0,
verbose=100,
)การเปรียบเทียบความเร็ว
แนวทางทั่วไป:
- LightGBM มักเร็วที่สุดกับชุดข้อมูลตัวเลขขนาดใหญ่
- CatBoost เหมาะที่สุดเมื่อมีคุณลักษณะเชิงหมวดหมู่จำนวนมาก และต้องปรับแต่งน้อยกว่า
- เอ็กซ์จีบูสต์ ผ่านการใช้งานมาอย่างยาวนาน มีความทนทาน และมีค่าเริ่มต้นที่ดี
ทดสอบทั้งสามไลบรารีกับข้อมูลของคุณ เนื่องจากผลลัพธ์จะแตกต่างกันไปตามปัญหา
การเลือกไลบรารี
หากข้อมูลของคุณเป็นข้อมูลเชิงหมวดหมู่จำนวนมาก ให้เริ่มจาก CatBoost หากเป็นตารางตัวเลขขนาดใหญ่มากและต้องการความเร็ว ให้เลือก LightGBM หากต้องการแบบจำลองพื้นฐานที่ผ่านการทดสอบมาอย่างดี ให้เลือกเอ็กซ์จีบูสต์ ทั้งสามไลบรารีใช้การบูสต์แบบเกรเดียนต์อยู่เบื้องหลัง ดังนั้นแนวคิดต่าง ๆ จึงถ่ายโอนกันได้
ตรวจสอบความรู้อย่างรวดเร็ว
ทดสอบความรู้เกี่ยวกับไลบรารีการบูสต์แบบเกรเดียนต์ของคุณ
สรุปบทเรียน
สรุปบทเรียน: LightGBM ใช้การเติบโตแบบอาศัยฮิสโตแกรมและแยกตามใบ โดยควบคุมด้วย num_leaves เพื่อให้ทำงานได้เร็วกับข้อมูลตัวเลขขนาดใหญ่ CatBoost จัดการคุณลักษณะเชิงหมวดหมู่ได้โดยตรงผ่าน cat_features โดยไม่ต้องเข้ารหัส ทั้งสองไลบรารี รวมถึงเอ็กซ์จีบูสต์ เป็นรูปแบบหนึ่งของการบูสต์แบบเกรเดียนต์ ควรทดสอบเพื่อเลือกใช้งาน โดยเลือก CatBoost สำหรับข้อมูลเชิงหมวดหมู่ และ LightGBM สำหรับความเร็ว
คำถามที่พบบ่อย
บทเรียน “LightGBM และ CatBoost” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “LightGBM และ CatBoost” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Learn AI with Python ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “LightGBM และ CatBoost”
เหตุใด LightGBM จึงเร็วกว่า การแบ่งแบบใช้ฮิสโตแกรม และ CatBoost สำหรับคุณลักษณะเชิงหมวดหมู่ คุณปฏิบัติ Learn AI with Python ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Learn AI with Python หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Learn AI with Python บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “LightGBM และ CatBoost” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Learn AI with Python นี้ได้ไหม
ได้ บทเรียน Learn AI with Python ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ต้นไม้ตัดสินใจ: ทฤษฎีและการนำไปใช้
- ป่าสุ่มและแบ็กกิง
- การเพิ่มแบบไล่ระดับ: GBM และ XGBoost
- LightGBM และ CatBoost