LGBMClassifier: راهنمای شروع - KDnuggets

LGBMClassifier: راهنمای شروع - KDnuggets

گره منبع: 2793517

LGBMClassifier: راهنمای شروع
تصویر توسط ویرایشگر 
 

تعداد زیادی الگوریتم یادگیری ماشینی وجود دارد که برای مدل‌سازی پدیده‌های خاص مناسب هستند. در حالی که برخی از مدل‌ها از مجموعه‌ای از ویژگی‌ها برای عملکرد بهتر از سایرین استفاده می‌کنند، برخی دیگر شامل یادگیرندگان ضعیفی می‌شوند تا از بقیه ویژگی‌ها برای ارائه اطلاعات اضافی به مدل استفاده کنند که به عنوان مدل‌های گروهی شناخته می‌شوند.

فرض مدل‌های گروهی بهبود عملکرد مدل با ترکیب پیش‌بینی‌های مدل‌های مختلف با کاهش خطاهای آنهاست. دو روش محبوب ترکیبی وجود دارد: کیسه زدن و تقویت. 

Bagging، با نام مستعار Bootstrapped Aggregation، چندین مدل فردی را بر روی زیرمجموعه‌های تصادفی مختلف داده‌های آموزشی آموزش می‌دهد و سپس پیش‌بینی‌های آنها را میانگین می‌دهد تا پیش‌بینی نهایی را ایجاد کند. از سوی دیگر، تقویت شامل آموزش مدل های فردی به صورت متوالی است، جایی که هر مدل تلاش می کند تا خطاهای مدل های قبلی را اصلاح کند.

اکنون که زمینه‌ای در مورد مدل‌های گروه داریم، اجازه دهید بر روی مدل گروه تقویت‌کننده، به‌ویژه الگوریتم Light GBM (LGBM) توسعه‌یافته توسط مایکروسافت دوبار کلیک کنیم. 

LGBMClassifier مخفف Light Gradient Boosting Machine Classifier است. از الگوریتم های درخت تصمیم برای رتبه بندی، طبقه بندی و سایر وظایف یادگیری ماشینی استفاده می کند. LGBMClassifier از تکنیک جدیدی از نمونه‌برداری یک طرفه مبتنی بر گرادیان (GOSS) و دسته‌بندی ویژگی‌های انحصاری (EFB) برای مدیریت داده‌های مقیاس بزرگ با دقت استفاده می‌کند و به طور مؤثر آن را سریع‌تر و استفاده از حافظه را کاهش می‌دهد.

نمونه برداری یک طرفه مبتنی بر گرادیان (GOSS) چیست؟

الگوریتم‌های سنتی تقویت گرادیان از تمام داده‌ها برای آموزش استفاده می‌کنند، که می‌تواند هنگام برخورد با مجموعه داده‌های بزرگ زمان‌بر باشد. از طرف دیگر، GOSS LightGBM، تمام نمونه‌ها را با گرادیان‌های بزرگ نگه می‌دارد و نمونه‌برداری تصادفی را روی نمونه‌هایی با گرادیان‌های کوچک انجام می‌دهد. شهود پشت این امر این است که نمونه‌هایی با گرادیان‌های بزرگ به سختی جا می‌شوند و بنابراین اطلاعات بیشتری را حمل می‌کنند. GOSS یک ضریب ثابت برای نمونه های داده با گرادیان های کوچک معرفی می کند تا از دست رفتن اطلاعات در طول نمونه برداری را جبران کند.

بسته‌بندی ویژگی انحصاری (EFB) چیست؟

در یک مجموعه داده پراکنده، بیشتر ویژگی ها صفر هستند. EFB یک الگوریتم تقریباً بدون ضرر است که ویژگی های منحصر به فرد متقابل (ویژگی هایی که به طور همزمان غیر صفر نیستند) را برای کاهش تعداد ابعاد و در نتیجه روند آموزش تسریع می کند. از آنجایی که این ویژگی‌ها «انحصاری» هستند، فضای ویژگی اصلی بدون از دست دادن اطلاعات قابل توجه حفظ می‌شود.

بسته LightGBM را می توان مستقیماً با استفاده از مدیر بسته pip – python نصب کرد. برای دانلود و نصب کتابخانه 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

آماده سازی مجموعه داده

ما از مجموعه داده محبوب تایتانیک استفاده می کنیم که حاوی اطلاعاتی در مورد مسافران تایتانیک است و متغیر هدف نشان می دهد که آیا آنها زنده مانده اند یا نه. می توانید مجموعه داده را از اینجا دانلود کنید کجگل یا از کد زیر برای بارگذاری مستقیم آن از Seaborn استفاده کنید، همانطور که در زیر نشان داده شده است:

titanic = sns.load_dataset('titanic')

 

ستون های غیر ضروری مانند "عرشه"، "embark_town" و "live" را رها کنید زیرا اضافی هستند یا به بقای هیچ فردی در کشتی کمک نمی کنند. در مرحله بعد، مشاهده کردیم که ویژگی‌های «سن»، «کرایه» و «سفارش» دارای مقادیر گم شده‌اند – توجه داشته باشید که ویژگی‌های مختلف با معیارهای آماری مناسب نسبت داده می‌شوند.

# 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 از 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") و ترتیبی ("کلاس") را رمزگذاری کنیم تا مطمئن شویم که مدل با داده‌های عددی عرضه می‌شود، زیرا 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 آن آشنا شدید. این یک تکنیک انعطاف پذیر است که برای انواع مختلف مشکلات طبقه بندی مفید است و باید بخشی از جعبه ابزار یادگیری ماشین شما باشد.
 
 
ویدی چوغ یک استراتژیست هوش مصنوعی و یک رهبر تحول دیجیتال است که در تقاطع محصولات، علوم و مهندسی کار می کند تا سیستم های یادگیری ماشینی مقیاس پذیر را بسازد. او یک رهبر نوآوری برنده جایزه، نویسنده و سخنران بین المللی است. او در ماموریتی است که یادگیری ماشینی را دموکراتیزه کند و این اصطلاح را بشکند تا همه بخشی از این تحول باشند.
 

تمبر زمان:

بیشتر از kdnuggets