LGBMClassifier: دليل البدء - KDnuggets

LGBMClassifier: دليل البدء - KDnuggets

عقدة المصدر: 2793517

LGBMClassifier: دليل البدء
الصورة بواسطة المحرر 
 

هناك عدد كبير من خوارزميات التعلم الآلي التي يمكنها نمذجة ظواهر معينة. بينما تستخدم بعض النماذج مجموعة من السمات لتتفوق في الأداء على الآخرين ، فإن البعض الآخر يشمل المتعلمين الضعفاء للاستفادة من باقي السمات لتوفير معلومات إضافية للنموذج ، والمعروفة باسم نماذج المجموعات.

تتمثل فرضية نماذج المجموعة في تحسين أداء النموذج من خلال الجمع بين التنبؤات من النماذج المختلفة عن طريق تقليل أخطائها. هناك نوعان من تقنيات التجميع الشائعة: التعبئة والتغليف والتعزيز. 

يعمل Bagging ، المعروف أيضًا باسم Bootstrapped Aggregation ، على تدريب العديد من النماذج الفردية على مجموعات فرعية عشوائية مختلفة من بيانات التدريب ثم حساب متوسط ​​توقعاتهم لإنتاج التنبؤ النهائي. من ناحية أخرى ، يتضمن التعزيز تدريب النماذج الفردية بالتتابع ، حيث يحاول كل نموذج تصحيح الأخطاء التي ارتكبتها النماذج السابقة.

الآن بعد أن أصبح لدينا سياق حول نماذج المجموعة ، فلننقر نقرًا مزدوجًا على نموذج مجموعة التعزيز ، وتحديداً خوارزمية Light GBM (LGBM) التي طورتها Microsoft. 

LGBMClassifier يرمز إلى مصنف آلة تعزيز التدرج الخفيف. يستخدم خوارزميات شجرة القرار للترتيب والتصنيف ومهام التعلم الآلي الأخرى. يستخدم LGBMClassifier تقنية جديدة لأخذ العينات من جانب واحد على أساس التدرج (GOSS) وتجميع الميزات الحصرية (EFB) للتعامل مع البيانات واسعة النطاق بدقة ، مما يجعلها أسرع بشكل فعال ويقلل من استخدام الذاكرة.

ما هو أخذ العينات من جانب واحد القائم على التدرج (GOSS)؟

تستخدم خوارزميات تعزيز التدرج التقليدي جميع البيانات للتدريب ، والتي يمكن أن تستغرق وقتًا طويلاً عند التعامل مع مجموعات البيانات الكبيرة. من ناحية أخرى ، يحتفظ نظام GOSS الخاص بـ LightGBM بجميع الحالات ذات التدرجات الكبيرة ويقوم بأخذ عينات عشوائية على الحالات ذات التدرجات الصغيرة. الحدس الكامن وراء ذلك هو أن الحالات ذات التدرجات الكبيرة يصعب ملاءمتها وبالتالي تحمل المزيد من المعلومات. تقدم GOSS مُضاعِفًا ثابتًا لحالات البيانات ذات التدرجات الصغيرة للتعويض عن فقد المعلومات أثناء أخذ العينات.

ما هي حزمة الميزات الحصرية (EFB)؟

في مجموعة بيانات متفرقة ، تكون معظم الميزات أصفارًا. EFB هي خوارزمية شبه خالية من الضياع تجمع / تجمع بين ميزات حصرية متبادلة (ميزات ليست غير صفرية في وقت واحد) لتقليل عدد الأبعاد ، وبالتالي تسريع عملية التدريب. نظرًا لأن هذه الميزات "حصرية" ، يتم الاحتفاظ بمساحة الميزة الأصلية دون فقد معلومات كبيرة.

يمكن تثبيت حزمة LightGBM مباشرة باستخدام pip - مدير حزم python. اكتب الأمر المشترك أدناه إما في Terminal أو موجه الأوامر لتنزيل مكتبة LightGBM وتثبيتها على جهازك:

pip install lightgbm

 

يمكن لمستخدمي Anaconda تثبيته باستخدام أمر "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

تحضير مجموعة البيانات

نحن نستخدم مجموعة بيانات تايتانيك الشهيرة ، والتي تحتوي على معلومات حول ركاب تيتانيك ، مع المتغير المستهدف الذي يشير إلى ما إذا كانوا قد نجوا أم لا. يمكنك تنزيل مجموعة البيانات من Kaggle أو استخدم الكود التالي لتحميله مباشرة من Seaborn ، كما هو موضح أدناه:

titanic = sns.load_dataset('titanic')

 

قم بإسقاط الأعمدة غير الضرورية مثل "deck" و "embark_town" و "على قيد الحياة" لأنها زائدة عن الحاجة أو لا تساهم في بقاء أي شخص على متن السفينة. بعد ذلك ، لاحظنا أن السمات "العمر" و "الأجرة" و "الرحلة" لها قيم مفقودة - لاحظ أنه يتم احتساب السمات المختلفة بمقاييس إحصائية مناسبة.

# 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']

تدريب نموذج تصنيف LGBM

لبدء تدريب نموذج LGBMClassifier ، نحتاج إلى تقسيم مجموعة البيانات إلى ميزات الإدخال والمتغيرات المستهدفة ، بالإضافة إلى مجموعات التدريب والاختبار باستخدام وظيفة train_test_split من scikit-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)

 

لنقم بتسمية ترميز البيانات الفئوية ("who") والترتيبية ("class") للتأكد من تزويد النموذج ببيانات رقمية ، نظرًا لأن 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

ضبط Hyperparameter

يتيح LGBMClassifier قدرًا كبيرًا من المرونة عبر المعلمات الفائقة التي يمكنك ضبطها للحصول على الأداء الأمثل. هنا ، سنناقش بإيجاز بعض المعلمات التشعبية الرئيسية:

  • عدد_أوراق: هذه هي المعلمة الرئيسية للتحكم في تعقيد النموذج الشجري. من الناحية المثالية ، يجب أن تكون قيمة عدد_الأوراق أقل من أو تساوي 2 ^ (max_depth).
  • min_data_in_leaf: هذه معلمة مهمة لمنع فرط التخصيص في شجرة أوراق الحكمة. تعتمد قيمته المثلى على عدد عينات التدريب وعدد الأوراق.
  • أقصى عمق: يمكنك استخدام هذا للحد من عمق الشجرة بشكل صريح. من الأفضل ضبط هذه المعلمة في حالة فرط التجهيز.

دعنا نضبط هذه المعلمات الفائقة وندرب نموذجًا جديدًا:

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. إنها تقنية مرنة مفيدة لأنواع مختلفة من مشاكل التصنيف ويجب أن تكون جزءًا من مجموعة أدوات التعلم الآلي الخاصة بك.
 
 
فيدي تشو هو استراتيجي للذكاء الاصطناعي وقائد للتحول الرقمي يعمل عند تقاطع المنتج والعلوم والهندسة لبناء أنظمة تعلم آلي قابلة للتطوير. هي قائدة ابتكار حائزة على جوائز ، ومؤلفة ، ومتحدثة دولية. إنها في مهمة لإضفاء الطابع الديمقراطي على التعلم الآلي وكسر المصطلحات اللغوية للجميع ليكونوا جزءًا من هذا التحول.
 

الطابع الزمني:

اكثر من KD nuggets