الگوریتم XGBoost به زبان ساده

27 اسفند 1403 - خواندن 5 دقیقه - 524 بازدید

الگوریتم XGBoost یکی از پرکاربردترین و قدرتمندترین الگوریتم های یادگیری ماشین در مسائل طبقه بندی (Classification) و رگرسیون (Regression) است. این الگوریتم به صورت گسترده در مسابقات Kaggle و پروژه های صنعتی استفاده می شود و دلیل اصلی محبوبیت آن، سرعت بالا و دقت زیاد در پیش بینی ها است.

یکی از سوالات متداول درباره XGBoost این است که آیا این الگوریتم از Gradient Descent استفاده می کند یا درخت تصمیم؟ پاسخ کوتاه این است که XGBoost از هر دو تکنیک بهره می برد. در این مقاله به بررسی کامل این الگوریتم، نحوه ترکیب این دو روش، هایپرپارامترهای کلیدی آن و کاربردهای عملی آن خواهیم پرداخت.


XGBoost از Gradient Descent استفاده می کند یا درخت تصمیم؟

برای پاسخ به این سوال، ابتدا باید نحوه کارکرد XGBoost را درک کنیم.


۱. درخت های تصمیم در XGBoost

XGBoost یک روش یادگیری تجمعی (Ensemble Learning) بر پایه درخت تصمیم (Decision Trees) است. در این روش، مدل شامل چندین درخت تصمیم است که به صورت افزایشی ساخته می شوند. در ابتدا، یک درخت تصمیم ساخته شده و سپس، درخت های جدید به مدل اضافه می شوند تا خطای مدل قبلی را کاهش دهند.


۲. استفاده از Gradient Descent در XGBoost

XGBoost از تکنیک Gradient Boosting برای به روزرسانی درخت ها استفاده می کند. این به این معنی است که هر درخت جدید در جهت کاهش خطای مدل قبلی ساخته می شود. فرآیند کلی به این صورت است:

  • ابتدا یک مدل ساده ساخته می شود.
  • مقدار خطا (Loss Function) محاسبه شده و گرادیان آن گرفته می شود.
  • گرادیان نشان می دهد که مدل در کدام جهت باید تغییر کند تا عملکرد بهتری داشته باشد.
  • درخت های جدید با هدف اصلاح خطاهای مدل قبلی ساخته می شوند.

بنابراین، XGBoost از درخت تصمیم برای مدل سازی استفاده می کند، اما برای بهینه سازی مدل از Gradient Descent بهره می برد. این ترکیب باعث می شود که مدل بتواند به صورت کارآمد و سریع به یادگیری بپردازد.


هایپرپارامترهای XGBoost

در جدول زیر، هایپرپارامترهای کلیدی XGBoost که در تنظیم مدل نقش دارند، توضیح داده شده اند:

۱. پارامترهای مربوط به هدف مدل

objective: نوع مسئله را مشخص می کند. مقدار binary:logistic برای طبقه بندی دوتایی (مثلا پیش بینی کنسلی هتل) استفاده می شود.

base_score: مقدار اولیه پیش بینی مدل قبل از شروع آموزش.


۲. پارامترهای مربوط به ساختار درخت

booster: نوع بوستر را تعیین می کند. مقدار پیش فرض gbtree (درخت های تصمیم) است.

max_depth: حداکثر عمق هر درخت. مقدار بیشتر می تواند منجر به Overfitting شود. max_leaves حداکثر تعداد برگ های هر درخت (مفید برای کنترل پیچیدگی).

grow_policy: سیاست رشد درخت. depthwise درخت را عمقی می سازد و lossguide بر اساس کمترین مقدار خطا تصمیم می گیرد.

۳. پارامترهای کنترل داده و نمونه گیری

subsample: درصدی از داده ها که در هر درخت استفاده می شوند. مقدار 0.5 یعنی فقط نیمی از داده ها استفاده می شوند.

colsample_bytree: درصد ویژگی هایی که برای ساخت هر درخت استفاده می شوند. مقدار کمتر باعث کاهش Overfitting می شود.

colsample_bylevel: تعداد ویژگی هایی که در هر سطح درخت انتخاب می شوند.

colsample_bynode: تعداد ویژگی هایی که در هر گره انتخاب می شوند.

۴. پارامترهای بهینه سازی مدل

learning_rate: میزان تغییر وزن ها در طول آموزش. مقدار کمتر باعث همگرایی بهتر اما کندتر می شود.

gamma: حداقل کاهش در خطا برای تقسیم گره های درخت. مقدار بیشتر باعث کمتر شدن رشد درخت می شود.

min_child_weight: حداقل وزن موردنیاز برای ایجاد یک گره جدید. مقدار بیشتر باعث ایجاد مدل ساده تر می شود

 reg_alpha (L1 regularization): مقدار L1 برای تنظیم وزن مدل و جلوگیری از Overfitting. 

reg_lambda (L2 regularization): مقدار L2 برای تنظیم مدل و جلوگیری از Overfitting.

۵. پارامترهای مربوط به اجرا و عملکرد مدل

n_estimators: تعداد کل درخت هایی که در مدل ساخته می شوند.

n_jobs: تعداد پردازنده هایی که برای پردازش مدل استفاده می شوند.

 random_state: مقدار عددی برای تولید اعداد تصادفی ثابت جهت بازتولید نتایج.

verbosity: نمایش اطلاعات در حین اجرا (۰ یعنی نمایش ندادن اطلاعات).

tree_method: نوع الگوریتم ساخت درخت.

early_stopping_rounds: اگر مدل پس از تعداد مشخصی تکرار بهبود پیدا نکند، آموزش متوقف می شود.


مثال کاربردی: پیش بینی تعداد کنسلی هتل با XGBoost

برای درک بهتر نحوه پیاده سازی XGBoost، شما می توانید پروژه ای که در گیت هاب منتشر کرده اید را مشاهده کنید. در این پروژه، از الگوریتم XGBoost برای پیش بینی تعداد کنسلی هتل ها استفاده شده است.

🔗 لینک پروژه: مشاهده در GitHub 


جمع بندی

در این مقاله، نحوه ترکیب درخت های تصمیم و Gradient Descent در XGBoost توضیح داده شد. این الگوریتم با استفاده از درخت های تصمیم برای مدل سازی و بهینه سازی مدل با گرادیان نزولی، یکی از قدرتمندترین ابزارهای یادگیری ماشین است. همچنین، توضیح جامعی درباره هایپرپارامترهای XGBoost ارائه شد که می تواند در بهینه سازی عملکرد مدل شما موثر باشد. اگر قصد دارید این الگوریتم را در پروژه های خود استفاده کنید، حتما هایپرپارامترها را با روش های تنظیم مدل (Hyperparameter Tuning) بهینه کنید تا به بهترین نتیجه ممکن برسید.