LGBMClassifier: מדריך לתחילת העבודה - KDnuggets

LGBMClassifier: מדריך לתחילת העבודה - KDnuggets

צומת המקור: 2793517

LGBMClassifier: מדריך לתחילת העבודה
תמונה מאת עורך 
 

יש מספר עצום של אלגוריתמים של למידת מכונה שמתאימים לדגמן תופעות ספציפיות. בעוד שדגמים מסוימים מנצלים סט של תכונות כדי להתעלות על אחרים, אחרים כוללים לומדים חלשים כדי לנצל את שאר התכונות כדי לספק מידע נוסף למודל, המכונה מודלים של אנסמבל.

הנחת היסוד של דגמי האנסמבל היא לשפר את ביצועי המודל על ידי שילוב התחזיות ממודלים שונים על ידי הפחתת השגיאות שלהם. ישנן שתי טכניקות ההרכבה הפופולריות: חבילה וחיזוק. 

Bagging, הידוע גם בשם Bootstrapped Aggregation, מאמן מספר מודלים בודדים על תת-קבוצות אקראיות שונות של נתוני האימון ולאחר מכן מעמיד ממוצע של התחזיות שלהם כדי לייצר את החיזוי הסופי. חיזוק, לעומת זאת, כרוך באימון מודלים בודדים ברצף, כאשר כל דגם מנסה לתקן את השגיאות שנעשו על ידי הדגמים הקודמים.

כעת, לאחר שיש לנו הקשר לגבי דגמי האנסמבל, הבה נקליק פעמיים על מודל האנסמבל המשפר, במיוחד האלגוריתם Light GBM (LGBM) שפותח על ידי מיקרוסופט. 

LGBMClassifier ראשי תיבות של Light Gradient Boosting Machine Classifier. הוא משתמש באלגוריתמים של עץ החלטות עבור דירוג, סיווג ומשימות אחרות של לימוד מכונה. LGBMClassifier משתמש בטכניקה חדשה של דגימה חד-צדדית מבוססת Gradient (GOSS) ו-Exclusive Feature Bundling (EFB) כדי לטפל בנתונים בקנה מידה גדול בדיוק, מה שהופך אותם למהיר יותר ומצמצם את השימוש בזיכרון.

מהי דגימה חד-צדדית מבוססת גרדיאנט (GOSS)?

אלגוריתמים מסורתיים להגברת השיפוע משתמשים בכל הנתונים לצורך אימון, דבר שעלול לצרוך זמן רב בעת התמודדות עם מערכי נתונים גדולים. ה-GOSS של LightGBM, לעומת זאת, שומר על כל המופעים עם שיפועים גדולים ומבצע דגימה אקראית במופעים עם שיפועים קטנים. האינטואיציה מאחורי זה היא שקשה יותר להתאים מופעים עם שיפועים גדולים ולכן הם נושאים מידע נוסף. GOSS מציגה מכפיל קבוע עבור מופעי הנתונים עם שיפועים קטנים כדי לפצות על אובדן המידע במהלך הדגימה.

מהו צרור תכונות בלעדי (EFB)?

במערך נתונים דליל, רוב התכונות הן אפסים. EFB הוא אלגוריתם כמעט ללא הפסדים המאגד/משלב תכונות בלעדיות הדדית (תכונות שאינן אפס בו-זמנית) כדי להפחית את מספר הממדים, ובכך להאיץ את תהליך האימון. מכיוון שתכונות אלה הן "בלעדיות", שטח התכונות המקורי נשמר ללא אובדן מידע משמעותי.

ניתן להתקין את חבילת LightGBM ישירות באמצעות pip – מנהל החבילות של python. הקלד את הפקודה המשותפת למטה במסוף או בשורת הפקודה כדי להוריד ולהתקין את ספריית LightGBM על המחשב שלך:

pip install lightgbm

 

משתמשי אנקונדה יכולים להתקין אותו באמצעות הפקודה "conda install" כפי שמופיעה למטה.

conda install -c conda-forge lightgbm

 

בהתבסס על מערכת ההפעלה שלך, אתה יכול לבחור את שיטת ההתקנה באמצעות מדריך זה.

כעת, בואו לייבא את LightGBM וספריות נחוצות אחרות:

import numpy as np
import pandas as pd
import seaborn as sns
import lightgbm as lgb
from sklearn.metrics import classification_report
from sklearn.model_selection import train_test_split

הכנת מערך הנתונים

אנו משתמשים במערך הנתונים הפופולרי של Titanic, המכיל מידע על הנוסעים בטיטאניק, כאשר משתנה היעד מציין אם הם שרדו או לא. אתה יכול להוריד את מערך הנתונים מ קגל או השתמש בקוד הבא כדי לטעון אותו ישירות מ-Seaborn, כפי שמוצג להלן:

titanic = sns.load_dataset('titanic')

 

זרוק עמודות מיותרות כגון "סיפון", "עיר_עליון" ו"חי" מכיוון שהם מיותרים או לא תורמים להישרדותו של אף אדם על הספינה. לאחר מכן, ראינו שלמאפיינים "גיל", "תעריף" ו"עלייה לדרך" חסרים ערכים - שימו לב שמאפיינים שונים נזקפים למדדים סטטיסטיים מתאימים.

# Drop unnecessary columns
titanic = titanic.drop(['deck', 'embark_town', 'alive'], axis=1) # Replace missing values with the median or mode
titanic['age'] = titanic['age'].fillna(titanic['age'].median())
titanic['fare'] = titanic['fare'].fillna(titanic['fare'].mode()[0])
titanic['embarked'] = titanic['embarked'].fillna(titanic['embarked'].mode()[0])

 

לבסוף, אנו ממירים את המשתנים הקטגוריים למשתנים מספריים באמצעות הקודים הקטגוריים של הפנדות. כעת, הנתונים מוכנים להתחיל בתהליך אימון המודל.

# Convert categorical variables to numerical variables
titanic['sex'] = pd.Categorical(titanic['sex']).codes
titanic['embarked'] = pd.Categorical(titanic['embarked']).codes # Split the dataset into input features and the target variable
X = titanic.drop('survived', axis=1)
y = titanic['survived']

הכשרת מודל LGBMClassifier

כדי להתחיל לאמן את מודל LGBMClassifier, עלינו לפצל את מערך הנתונים לתכונות קלט ומשתני יעד, כמו גם מערכי אימון ובדיקות באמצעות הפונקציה train_test_split מ-sikit-learn.

# Split the dataset into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

 

הבה נקודד נתונים קטגוריים ("מי") ורדינליים ("מחלקה") כדי להבטיח שהדגם מסופק עם נתונים מספריים, שכן LGBM לא צורכת נתונים לא מספריים.

class_dict = { "Third": 3, "First": 1, "Second": 2
}
who_dict = { "child": 0, "woman": 1, "man": 2
}
X_train['class'] = X_train['class'].apply(lambda x: class_dict[x])
X_train['who'] = X_train['who'].apply(lambda x: who_dict[x])
X_test['class'] = X_test['class'].apply(lambda x: class_dict[x])
X_test['who'] = X_test['who'].apply(lambda x: who_dict[x])

 

לאחר מכן, אנו מציינים את הפרמטרים של המודל כארגומנטים לבנאי, או שנוכל להעביר אותם כמילון למתודה set_params.  

השלב האחרון לתחילת אימון המודל הוא טעינת מערך הנתונים על ידי יצירת מופע של מחלקת LGBMClassifier והתאמתו לנתוני ההדרכה. 

params = { 'objective': 'binary', 'boosting_type': 'gbdt', 'num_leaves': 31, 'learning_rate': 0.05, 'feature_fraction': 0.9
}
clf = lgb.LGBMClassifier(**params)
clf.fit(X_train, y_train)

 

לאחר מכן, הרשו לנו להעריך את הביצועים של המסווג המאומן במערך הנתונים הבלתי נראה או הבדיקה.

predictions = clf.predict(X_test)
print(classification_report(y_test, predictions))

 

 precision recall f1-score support 0 0.84 0.89 0.86 105 1 0.82 0.76 0.79 74 accuracy 0.83 179 macro avg 0.83 0.82 0.82 179
weighted avg 0.83 0.83 0.83 179

כוונון היפר-פרמטר

ה-LGBMClassifier מאפשר גמישות רבה באמצעות היפרפרמטרים שתוכלו לכוונן לביצועים מיטביים. כאן, נדון בקצרה בכמה מפרמטרי ההיפר-פרמטרים העיקריים:

  • מספר_עלים: זהו הפרמטר העיקרי לשליטה במורכבות מודל העץ. באופן אידיאלי, הערך של num_leaves צריך להיות קטן או שווה ל-2^(max_depth).
  • min_data_in_leaf: זהו פרמטר חשוב למניעת התאמת יתר בעץ בעלים. הערך האופטימלי שלו תלוי במספר דגימות האימון ו-num_leaves.
  • מקסימום עומק: אתה יכול להשתמש בזה כדי להגביל את עומק העץ באופן מפורש. עדיף לכוון את הפרמטר הזה במקרה של התאמה יתר.

בואו נכוון את ההיפרפרמטרים האלה ונאמן דגם חדש:

model = lgb.LGBMClassifier(num_leaves=31, min_data_in_leaf=20, max_depth=5)
model.fit(X_train, y_train)

 

predictions = model.predict(X_test)
print(classification_report(y_test, predictions))

 

 precision recall f1-score support 0 0.85 0.89 0.87 105 1 0.83 0.77 0.80 74 accuracy 0.84 179 macro avg 0.84 0.83 0.83 179
weighted avg 0.84 0.84 0.84 179

 

שים לב שכוונון בפועל של היפרפרמטרים הוא תהליך הכולל ניסוי וטעייה ועשוי להיות מונחה על ידי ניסיון והבנה מעמיקה יותר של האלגוריתם המגביר ומומחיות הנושא (ידע בתחום) של הבעיה העסקית עליה אתה עובד.

בפוסט זה למדת על אלגוריתם LightGBM והטמעת Python שלו. זוהי טכניקה גמישה ששימושית עבור סוגים שונים של בעיות סיווג וצריכה להיות חלק מערך הכלים שלך ללימוד מכונה.
 
 
וידי צ'וג הוא אסטרטג AI ומוביל טרנספורמציה דיגיטלית שעובד בצומת של מוצר, מדעים והנדסה לבניית מערכות למידת מכונה ניתנות להרחבה. היא מנהיגת חדשנות עטורת פרסים, סופרת ודוברת בינלאומית. היא במשימה לדמוקרטיזציה של למידת מכונה ולשבור את הז'רגון כדי שכולם יהיו חלק מהשינוי הזה.
 

בול זמן:

עוד מ KDnuggets