XGBoost

XGBoost היא ספריית תוכנה קוד פתוח המספקת מסגרת נירמול (regularizing) וחיזוק גרדיאנט לשפות: C ++, Java,Python, ג'וליה, Perl, וסקאלה. XGBoost עובדת על לינוקס, Windows, ו- macOS. מתוך תיאור הפרויקט, היא שואפת לספק "ספרייה להגברת הדרגתיות ניתנת להרחבה, ניידת ומבוזרת (GBM, GBRT, GBDT). XGBoost פועל על מכונה בודדת, כמו גם על מסגרות עיבוד מבוזרות Apache Hadoop, Apache Spark, Apache Flink ו- Dask. הספרייה זכתה לפופולריות רבה ותשומת לב בתור האלגוריתם המועדף עבור צוותים מנצחים רבים של תחרויות למידת מכונה. XGBoost התחילה כפרויקט מחקר של טיאנקי צ'ן כחלק מקבוצת ה-Distributed (Deep) Machine Learning Community (או DMLC). בתחילה, כיישום מסוף שניתן להגדיר באמצעות קובץ תצורה של libsvm. הוא התפרסם בחוגי התחרות ב-ML לאחר השימוש בו בפתרון המנצח של אתגר למידת המכונה של Higgs. זמן קצר לאחר מכן, חבילות Python ו-R נבנו, ול-XGBoost יש כעת הטמעת חבילות עבור Java, Scala, Julia, Perl ושפות אחרות. זה הביא את הספרייה למפתחים נוספים ותרם לפופולריות שלה בקרב קהילת Kaggle, שם היא שימשה למספר רב של תחרויות. עד מהרה הוא שולב עם מספר חבילות אחרות מה שהופך אותו קל יותר לשימוש בקהילות שלהם. כעת הוא שולב עם scikit-learn עבור משתמשי Python ועם חבילת caret עבור משתמשי R. ניתן לשלב אותו גם במסגרות Data Flow כמו Apache Spark, Apache Hadoop ו- Apache Flink באמצעות ה-Rabit המופשט ו-XGBoost4J. ספריית XGBoost זמינה גם ב- OpenCL עבור FPGAs. יישום יעיל וניתן להרחבה של XGBoost פורסם על ידי Tianqi Chen ו-Carlos Guestrin. תכונות בולטות של XGBoost שמבדילות אותו מאלגוריתמים אחרים של Gradient boosting כוללות: ענישה חכמה של עצים כיווץ פרופורציונלי של צמתי עלים ניוטון בוסטינג פרמטר אקראי יתיר יישום על מערכות בודדות, מבוזרות ומחשוב מחוץ לליבה בחירת מאפיינים (Feature selection) אוטומטית בשונה מאלגוריתם מסוג חיזוק גרדיאנט (gradient boosting) שפועל כדעיכת גרדיאנט, ‏XGBoost עובד כ"ניוטון-רפסון" במרחב הפונקציונלי. שערוך טיילור מסדר שני משמש בתור פונקציית ההפסד כדי לקשר למתודת ניוטון-רפסון. אלגוריתם גנרי של XGBoost, עם נתוני קלט: { ( x i , y i ) } i = 1 N {\displaystyle \{(x_{i},y_{i})\}_{i=1}^{N}} , פונקציית הפסד: L ( y , F ( x ) ) {\displaystyle L(y,F(x))} , מספר "לומדים חלשים": M {\displaystyle M} , וקצב למידה: α {\displaystyle \alpha } . מודל ראשוני עם ערך 0: f ^ ( 0 ) ( x ) = arg ⁡ min θ ∑ i = 1 N L ( y i , θ ) . {\displaystyle {\hat {f}}_{(0)}(x)={\underset {\theta }{\arg \min }}\sum _{i=1}^{N}L(y_{i},\theta ).} עבור m = 1 עד M: חישוב הגרדיאנטים וההסיאנים: g ^ m ( x i ) = [ ∂ L ( y i , f ( x i ) ) ∂ f ( x i ) ] f ( x ) = f ^ ( m − 1 ) ( x ) . {\displaystyle {\hat {g}}_{m}(x_{i})=\left[{\frac {\partial L(y_{i},f(x_{i}))}{\partial f(x_{i})}}\right]_{f(x)={\hat {f}}_{(m-1)}(x)}.} h ^ m ( x i ) = [ ∂ 2 L ( y i , f ( x i ) ) ∂ f ( x i ) 2 ] f ( x ) = f ^ ( m − 1 ) ( x ) . {\displaystyle {\hat {h}}_{m}(x_{i})=\left[{\frac {\partial ^{2}L(y_{i},f(x_{i}))}{\partial f(x_{i})^{2}}}\right]_{f(x)={\hat {f}}_{(m-1)}(x)}.} התאמת לומד בסיסי (או לומד חלש, כמו עץ) בעזרת נתוני האימון { x i , − g ^ m ( x i ) h ^ m ( x i ) } i = 1 N {\displaystyle \displaystyle \{x_{i},-{\frac {{\hat {g}}_{m}(x_{i})}{{\hat {h}}_{m}(x_{i})}}\}_{i=1}^{N}} על ידי פתירת בעיית האופטימיזציה שלהלן: ϕ ^ m = arg ⁡ min ϕ ∈ Φ ∑ i = 1 N 1 2 h ^ m ( x i ) [ − g ^ m ( x i ) h ^ m ( x i ) − ϕ ( x i ) ] 2 . {\displaystyle {\hat {\phi }}_{m}={\underset {\phi \in \mathbf {\Phi } }{\arg \min }}\sum _{i=1}^{N}{\frac {1}{2}}{\hat {h}}_{m}(x_{i})\left[-{\frac {{\hat {g}}_{m}(x_{i})}{{\hat {h}}_{m}(x_{i})}}-\phi (x_{i})\right]^{2}.} f ^ m ( x ) = α ϕ ^ m ( x ) . {\displaystyle {\hat {f}}_{m}(x)=\alpha {\hat {\phi }}_{m}(x).} עדכון המודל: f ^ ( m ) ( x ) = f ^ ( m − 1 ) ( x ) + f ^ m ( x ) . {\displaystyle {\hat {f}}_{(m)}(x)={\hat {f}}_{(m-1)}(x)+{\hat {f}}_{m}(x).} פלט f ^ ( x ) = f ^ ( M ) ( x ) = ∑ m = 0 M f ^ m ( x ) . {\displaystyle {\hat {f}}(x)={\hat {f}}_{(M)}(x)=\sum _{m=0}^{M}{\hat {f}}_{m}(x).} פרס ג'ון צ'יימברס (2016) פרס פיזיקת אנרגיה גבוהה פוגשת למידה חישובית (HEP meets ML) (2016) "GitHub project webpage". "Python Package Index PYPI: xgboost". נבדק ב-2016-08-01. "CRAN package xgboost". נבדק ב-2016-08-01. "Julia package listing xgboost". נבדק ב-2016-08-01. "CPAN module AI::XGBoost". נבדק ב-2020-02-09. "Installing XGBoost for Anaconda in Windows". נבדק ב-2016-08-01. "Installing XGBoost on Mac OSX". נבדק ב-2016-08-01. "Dask Homepage". "Distributed XGBoost with Dask — xgboost 1.5.0-dev documentation". xgboost.readthedocs.io. נבדק ב-2021-07-15. "XGBoost - ML winning solutions (incomplete list)". נבדק ב-2016-08-01. "Story and Lessons behind the evolution of XGBoost". נבדק ב-2016-08-01. "Rabit - Reliable Allreduce and Broadcast Interface". נבדק ב-2016-08-01. "XGBoost4J". נבדק ב-2016-08-01. "XGBoost on FPGAs". נבדק ב-2019-08-01. Gandhi, Rohith (2019-05-24). "Gradient Boosting and XGBoost". Medium (באנגלית). נבדק ב-2020-01-04. "Boosting algorithm: XGBoost". Towards Data Science (באנגלית). 2017-05-14. נבדק ב-2020-01-04. "Tree Boosting With XGBoost – Why Does XGBoost Win "Every" Machine Learning Competition?". Synced (באנגלית אמריקאית). 2017-10-22. נבדק ב-2020-01-04. "John Chambers Award Previous Winners". נבדק ב-2016-08-01. "HEP meets ML Award". נבדק ב-2016-08-01.