40 گام به سوی آینده‌ای هوشمند - مجموعه وبینارهای رایگان در حوزه هوش مصنوعی
Filter by دسته‌ها
آموزش هوش مصنوعی و انواع آن
آموزش‌های پایه‌ای هوش مصنوعی
اصول هوش مصنوعی
پایتون و ابزارهای یادگیری عمیق
کتابخانه‌ های یادگیری عمیق
یادگیری با نظارت
یادگیری بدون نظارت
یادگیری تقویتی
یادگیری عمیق
یادگیری نیمه نظارتی
آموزش‌های پیشرفته هوش مصنوعی
بینایی ماشین
پردازش زبان طبیعی
پردازش گفتار
چالش‌های عملیاتی
داده کاوی و بیگ دیتا
رایانش ابری و HPC
سیستم‌‌های امبدد
علوم شناختی
دیتاست
اخبار
تیتر یک
رسانه‌ها
آموزش پردازش زبان طبیعی
آموزش علوم داده
اینفوگرافیک
پادکست
ویدیو
رویدادها
دوره
کارگاه
وبینار
کاربردهای هوش مصنوعی
کسب‌و‌کار
تحلیل بازارهای هوش مصنوعی
کارآفرینی
هوش مصنوعی در ایران
هوش مصنوعی در جهان
وبینارها، کارگاره‌ها و دوره‌ها
 توضیح XGBoost برای مبتدیان

توضیح XGBoost برای مبتدیان

XGBoost کتابخانه متن‌بازی است که نقش مؤثری در اجرای کارآمدِ درخت‌های تصمیم دارد. کد C++ به همراه واسط کاربری پایتون می‌تواند بسته‌ای قدرتمند بسازد که به‌راحتی اجرا شود. XGBoost به لطف عملکرد فوق‌العاده‌ای که دارد، در بسیاری از مسابقات Kaggle به موفقیت رسیده است. قابلیت تقویت گرادیان این کتابخانه نظیر ندارد و انتظار می‌رود در آینده، خبرهای خوبی درباره آن به گوش برسد. مفاهیم پایه‌ کتابخانه‌ XGBoost در این نوشتار توضیح داده خواهد شد. در ابتدا، سازوکار تقویت گرادیان را بررسی خواهیم کرد و سپس به نمونه‌ای اشاره خواهیم کرد که نقش XGBoost را در تسریع کارها نشان می‌دهد.

تقویت درخت‌ها

مدل یادگیری ماشین ساده‌ای نظیر درخت تصمیم می‌تواند به آموزش مدل در مجموعه‌داده‌مان کمک کند. این مدل در امر پیش‌بینی استفاده می‌شود. ممکن است پارامترها را قدری تغییر دهیم یا امر داده‌‌افزایی را بررسی کنیم؛ اما در نهایت فقط از یک مدل استفاده می‌کنیم. حتی در صورتی که یک مجموعه بسازیم، همه مدل‌ها به‌صورت جداگانه آموزش داده شده و در داده‌هایمان به کار برده می‌شوند. از سوی دیگر، عمل «تقویت Boosting» در رویکردی تکراریiterative  به اجرا در می‌آید؛ اما کماکان یک روش کلاسه‌بندی جمعیEnsemble technique  برشمرده می‌شود. مدل‌های بسیاری در این روش‌ها با یکدیگر ادغام می‌شوند، تا عملیات نهایی صورت گیرد، اما رویکرد هوشمندانه‌ای در پیش گرفته می‌شود.

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

تقویت گرادیان به روشی اطلاق می‌شود که در آن، مدل‌های جدید با هدفِ پیش‌بینی باقی‌مانده‌های مدل‌های پیشین آموزش داده می‌شوند. جزئیات این روش در نمودار زیر نشان داده شده است.

XGBoost

آغاز به کار با XGBoost

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

pip install xgboost

به‌کارگیری داده با XGBoost

در ادامه‌ نوشتار از دیتاست گل زنبقIris flowers dataset  استفاده خواهیم کرد. در این راستا، می‌توان از Scikit Learn برای بارگذاری آن در پایتون استفاده کرد. همچنین، کتابخانه‌ تازه‌نصب‌شده‌ XGBoost نیز نیاز به وارد کردن دارد.

from sklearn import datasets
import xgboost as xgb

iris = datasets.load_iris()
X = iris.data
y = iris.target

 

به‌کارگیری داده‌ها با تفکیک بین داده‌های آموزشی و آزمایشی آغاز می‌شود. بدین ترتیب، امکان مشاهده نحوه عملکرد XGBoost فراهم می‌آید. این بار با تفکیک %20-%80 ادامه می‌دهیم.

from sklearn.model_selection import train_test_split

X_train, X_test, Y_train, Y_test = train_test_split(X, y, test_size=0.2)

 

برای اینکه XGBoost قادر به استفاده از داده‌های ما باشد، باید آن را به قالب خاصی تبدیل کنیم، تا XGBoost بتواند مدیریتش کند. این قالب «DMatrix» نام دارد. این رویکرد تک‌خطی برای تبدیل آرایش نامنظم داده‌ها به قالب «DMatrix» استفاده می‌شود.

D_train = xgb.DMatrix(X_train, label=Y_train)
D_test = xgb.DMatrix(X_test, label=Y_test)

تعریف مدل XGBoost

حال که تمامی داده‌ها بارگذاری شده است، می‌توان پارامترهای روش کلاسه‌بندی جمعی تقویت گرادیان را تعریف کرد. تعدادی از مهم‌ترین پارامترها در بخش زیر نشان داده شده است. اگر می‌خواهید تَسک‌ها و مدل‌های پیچیده‌تری را بررسی کنید، به لیست کامل پارامترهای احتمالی در وب‌سایت رسمی XGBoost مراجعه نمایید.

param = {
'eta': 0.3,
'max_depth': 3,
'objective': 'multi:softprob',
'num_class': 3}

steps = 20  # The number of training iterations

 

ساده‌ترین پارامترها عبارت‌اند از: max_depth  (عمق بیشینه‌ درخت‌های تصمیمی که آموزش داده می‌شوند)، objective  (تابع زیان مورداستفاده) و num_class  (تعداد دسته‌ها در دیتاست). الگوریتمeta  باید بیش از پیش مورد توجه قرار گیرد.

با توجه به نظریه‌مان، ایجاد و افزودن درخت‌های تصمیم به مدل کلاسه‌بندی جمعی Ensemble model  از جمله عملیاتی است که در «تقویت گرادیان» انجام می‌شود. درخت‌های جدید با هدفِ تصحیح خطاهای باقی‌مانده در پیش‌بینی‌های به‌دست‌آمده از کلاسه‌بندی جمعی موجود ایجاد می‌شوند. بنا به ماهیت مدل کلاسه‌بندی جمعی، احتمال بیش‌برازش افزایش می‌یابد. در این راستا، چندین مدل در کنار یکدیگر قرار می‌گیرند، تا مدل بسیار بزرگ و پیچیده‌ای ایجاد گردد. عده‌ای از eta به‌عنوان نرخ یادگیریLearning rate  یاد می‌کنند. به جای افزودن پیش‌بینی‌ درخت‌های جدید به مدل کلاسه‌بندی جمعی با وزن کامل، eta به باقی‌مانده‌هایی ضرب می‌شود که با هدف کاهش وزن اضافه می‌شوند. این اقدام می‌تواند پیچیدگی مدل را به طرز مؤثری کاهش دهد. رایج است که مقادیر کوچک در بازه‌ 1/0 تا 3/0 جای گیرند. وزن کمِ این باقی‌مانده‌ها کماکان می‌تواند نقش مهمی در آموزش مدل‌های قدرتمند داشته باشد، اما اجازه نمی‌دهد مدل با پیچیدگی بیش از حد همراه شود. در این شرایط، احتمال بیش‌برازش بالاست.

آموزش و آزمایش

طبق رویکردی که در Scikit Learn در پیش گرفته شد، مدل‌مان را سرانجام آموزش می‌دهیم.

model = xgb.train(param, D_train, steps)

 

اکنون، نوبت به ارزیابی رسیده است. این فرایند شباهت بسیاری به آموزش مدل‌ها در Scikit Learn دارد:

import numpy as np
from sklearn.metrics import precision_score, recall_score, accuracy_score

preds = model.predict(D_test)
best_preds = np.asarray([np.argmax(line) for line in preds])

print("Precision = {}".format(precision_score(Y_test, best_preds, average='macro')))
print("Recall = {}".format(recall_score(Y_test, best_preds, average='macro')))
print("Accuracy = {}".format(accuracy_score(Y_test, best_preds)))

 

بسیار عالی!

اگر تا به اینجا همه مراحل را پابه‌پای ما طی کرده باشید، باید دست‌کم به دقت 90 درصدی دست پیدا کرده باشید.

بررسی بیشتر با XGBoost

مفاهیم پایه XGBoost در این نوشتار توضیح داده شد؛ اما چند ویژگی‌ جالب دیگر وجود دارد که به شما کمک می‌کند، تا بهترین عملکرد را برای مدل‌هایتان به ارمغان آورید.

  • پارامتر گاما می‌تواند نقش مهمی در کنترل بیش‌برازش ایفا کند و کاهش کمینه‌ زیان را نیز تصریح می‌کند، تا بخش‌بندی بیشتر در گره برگ درخت میسر شود. به تعبیری، ایجاد گره جدید زیان را به مقدار معین کاهش نمی‌دهد؛ پس اصلاً آن را ایجاد نخواهیم کرد.
  • پارامتر تقویت‌کننده Booster parameter  این فرصت را در اختیار افراد قرار می‌دهد، تا نوع مدلی را که می‌خواهند در هنگام ساخت کلاسه‌بندی جمعی به کار ببرند، تعیین کنند. gbtree پیش‌فرض ماست که مجموعه‌ای از درخت‌های تصمیم می‌سازد. اگر داده‌هایتان بیش از حد پیچیده نیست، می‌توانید از gblinear استفاده کنید که ساده‌تر و آسان‌تر است، زیرا مجموعه‌ای از مدل‌های خطی تهیه می‌کند.
  • تعیین هایپرپارامترهای بهینه‌ مدل‌های یادگیری ماشین می‌تواند چالش بزرگی به همراه داشته باشد، آیا بهتر نیست این کار را به Scikit Learn بسپاریم؟ امکان تلفیق جست‌وجوی شبکه‌ Scikit Learn با کلاسیفایر XGBoost وجود دارد:
from sklearn.model_selection import GridSearchCV

clf = xgb.XGBClassifier()
parameters = {
"eta"    : [0.05, 0.10, 0.15, 0.20, 0.25, 0.30 ] ,
"max_depth"        : [ 3, 4, 5, 6, 8, 10, 12, 15],
"min_child_weight" : [ 1, 3, 5, 7 ],
"gamma"            : [ 0.0, 0.1, 0.2 , 0.3, 0.4 ],
"colsample_bytree" : [ 0.3, 0.4, 0.5 , 0.7 ]
}

grid = GridSearchCV(clf,
parameters, n_jobs=4,
scoring="neg_log_loss",
cv=3)

grid.fit(X_train, Y_train)

 

اگر زمان کافی دارید، این کار را در دیتاست بزرگ‌تری انجام دهید. جست‌وجوی شبکه اساساً به معنای آموزش مجموعه‌ای از درخت‌های تصمیم برای چندین بار است.

به محض اینکه مدل XGBoost آموزش یافت، می‌توانید توصیفی خوانا از آن در قالب فایل متنی ارائه کنید:

model.dump_model('dump.raw.txt')

 

میانگین امتیاز / 5. تعداد ارا :

مطالب پیشنهادی مرتبط

اشتراک در
اطلاع از
0 نظرات
بازخورد (Feedback) های اینلاین
مشاهده همه دیدگاه ها
لطفاً برای تکمیل این فرم، جاوا اسکریپت را در مرورگر خود فعال کنید.