My guess is that catboost doesn't use the dummified variables, so the weight given to each (categorical) variable is more balanced compared to the other implementations, so the high-cardinality variables don't have more weight than the others.
https://arxiv.org/abs/1706.09516
คุณต้องการดูกระดาษภาษาอังกฤษนี้จากทีม Yandex เกี่ยวกับเอกลักษณ์ทางคณิตศาสตร์ของ CATBoost
ฉันอ่านมันสั้น ๆ และในบางสิ่งที่ฉันสามารถเข้าใจได้อย่างรวดเร็วคือความจริงที่ว่าพวกเขาไม่ได้ใช้ส่วนที่เหลือที่ได้รับจากTRAINเพื่อทำTRAINเนื่องจากส่วนที่เหลือเหล่านี้สร้างอคติเชิงคุณภาพของการเรียนรู้ ( อัปเดต:ความแปลกใหม่นี้นำวิธีการต่อสู้กับการ overfitting ซึ่งเป็นหนึ่งในเหตุผลที่อัลกอริทึมทำงานได้ดีขึ้นเมื่อเทียบกับ analogues นอกเหนือจากความหลากหลายของวิธีในการประมวลผลตัวแปรเด็ดขาดล่วงหน้า)
ฉันขอโทษที่ไม่ให้คำตอบที่เฉพาะเจาะจงและครบถ้วน
ความแตกต่างทางคณิตศาสตร์ระหว่าง GBM, XGBoost
ก่อนอื่นฉันขอแนะนำให้คุณอ่านกระดาษโดย Friedman เกี่ยวกับเครื่องไล่สีไล่ระดับสีที่ใช้กับโมเดลเชิงเส้นถดถอยตัวแยกประเภทและต้นไม้ตัดสินใจโดยเฉพาะ https://statweb.stanford.edu/~jhf/ftp/trebst.pdf
ฉันจะไม่เข้าไปดูรายละเอียดที่นี่ มันเป็นเพียงการอ่านที่ดีที่ครอบคลุมประเภทการสูญเสีย (L) และนอกจากแนวคิดที่มีความสำคัญหลากหลาย ของหลักสูตรนี้เป็นเอกสารสำคัญของการใช้วิธีการสืบเชื้อสายในพื้นที่ของฟังก์ชั่น (แบบจำลองระดับต่ำ) มากกว่าพารามิเตอร์ในการแสวงหาการลดการสูญเสีย
หากคุณดูที่นี่: https://arxiv.org/pdf/1603.02754.pdf
คุณพบบทความสั้นคณิตศาสตร์สำหรับโมเดล XGBoost โดย Tianqi Chen และคณะ ตอนนี้มันกลายเป็นที่น่าสนใจ ความเบี่ยงเบนทางคณิตศาสตร์ของโมเดลนี้ในรูปแบบ GBM ของ Friedman คลาสสิกคือ:
- Normalized (ลงโทษ) พารามิเตอร์ (และเราจำได้ว่าพารามิเตอร์ใน boossting คือฟังก์ชันต้นไม้หรือโมเดลเชิงเส้น): L1 และ L2 พร้อมใช้งาน
- ใช้อนุพันธ์ที่สองเพื่อเร่งกระบวนการ (ถ้าใช้ก่อนโปรดแก้ไขให้ถูกต้อง)
มาถึงจุดนี้: ดูที่นี่เพื่อค้นหาการใช้งานการสูญเสียควอไทล์ใน CATBoost ซึ่งมีประโยชน์และให้ทั้งอนุพันธ์อันดับหนึ่งและสอง: https://github.com/catboost/catboost/blob/master/catboost/libs/algo/ error_functions.h
class TQuantileError : public IDerCalcer<TQuantileError, /*StoreExpApproxParam*/ false> { public:
const double QUANTILE_DER2 = 0.0;
double Alpha;
SAVELOAD(Alpha);
explicit TQuantileError(bool storeExpApprox)
: Alpha(0.5)
{
CB_ENSURE(storeExpApprox == StoreExpApprox, "Approx format does not match");
}
TQuantileError(double alpha, bool storeExpApprox)
: Alpha(alpha)
{
Y_ASSERT(Alpha > -1e-6 && Alpha < 1.0 + 1e-6);
CB_ENSURE(storeExpApprox == StoreExpApprox, "Approx format does not match");
}
double CalcDer(double approx, float target) const {
return (target - approx > 0) ? Alpha : -(1 - Alpha);
}
double CalcDer2(double = 0, float = 0) const {
return QUANTILE_DER2;
} };
แม้ว่าคุณจะไม่พบฟังก์ชันการสูญเสีย L1 ที่มีประโยชน์นี้ใน XGBoost คุณสามารถลองเปรียบเทียบการใช้งานของ Yandex กับฟังก์ชั่นการสูญเสียที่กำหนดเองที่เขียนขึ้นสำหรับ XGB
- นอกจากนี้ CATBoost ยังทำงานได้อย่างยอดเยี่ยมด้วยฟีเจอร์ที่จัดหมวดหมู่ในขณะที่ XGBoost รับเฉพาะอินพุตที่เป็นตัวเลขเท่านั้น
พิจารณาลิงค์นี้: https://tech.yandex.com/catboost/doc/dg/concepts/algorithm-main-stages_cat-to-numberic-docpage/#algorithm-main-stages_cat-to-numberic
พวกเขาเสนอวิธีที่หลากหลายในการป้อนฟีเจอร์ที่เป็นหมวดหมู่ให้กับการฝึกอบรมแบบจำลองโดยใช้วิธีการแบบเก่าและที่รู้จักกันดี การลดขนาดของพื้นที่อินพุตโดยไม่สูญเสียข้อมูลมากเป็นหนึ่งในสาเหตุที่เป็นไปได้รุ่นที่ติดตั้งจะติดตั้งน้อยเกินไป
ฉันเสร็จแล้ว. ฉันไม่ใช้ LightGBM ดังนั้นจึงไม่สามารถกำจัดแสงใด ๆ