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

الگوریتم XGBoost – مقدمه

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

خب ، بیایید آموزش الگوریتم XGBoost را شروع کنیم.

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

مقدمه ای بر الگوریتم XGBoost

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

بیشتر بخوانید ، XGBoost در یادگیری ماشین چیست

الگوریتم XGBoost با رابط های اصلی کار می کند

  • زبان های C ++ ، Java و JVM
  • Julia
  • واسط خط فرمان ( CLI )
  • رابط پایتون و همچنین مدلی در scikit-learn
  • رابط R و همچنین مدلی در caret package

درباره الگوریتم های یادگیری ماشین بیشتر بخوانید

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

بیایید فرض کنیم ، شما یک مجموعه داده به نام ” campaign ” دارید. و می خواهید همه متغیرهای دسته بندی را به یک سری پرچم تبدیل کنید، به جز متغیر پاسخ. نحوه انجام این کار بصورت زیر است :

sparse_matrix <- sparse.model.matrix(response ~ .-1, data = campaign)

حالا اجازه دهید این کد را به صورت زیر باز کنیم :

” sparse.model.matrix ” دستور است. و سایر ورودی های داخل پرانتز پارامتر هستند.

پارامتر ” response ” می گوید که این عبارت باید متغیر ” response ” را نادیده بگیرد.

“۱-” یک ستون اضافی را حذف می کند که این دستور اولین ستون را ایجاد می کند.

و در آخر ، نام مجموعه داده را تعیین می کنید.

برای تبدیل متغیرهای هدف نیز می توانید از کد زیر استفاده کنید :

output_vector = df[,response] == “Responder”

کاری که این کد انجام می دهد به شرح زیر است :

output_vector را برابر ۰ قرار می دهد.

output_vector را برای سطر هایی که یک پاسخ ” Responder ” درست ( TRUE ) است برابر ۱ تنظیم می کند.

output_vector  را برمی گرداند.

درباره کاربرد های یادگیری ماشین بخوانید

مدل ساخت با الگوریتم XGBoostR

در اینجا مراحل ساده ای وجود دارد که می توانید با استفاده از الگوریتم XGBoost برای رفع هرگونه مشکل داده استفاده کنید :

مرحله ۱ : بارگذاری کتابخانه ها

library(xgboost)
library(readr)
library(stringr)
library(caret)
library(car)

مرحله ۲ : بارگذاری مجموعه داده

(در اینجا از داده های بانکی استفاده شده است که باید بدانیم یک مشتری واجد شرایط دریافت وام می باشد یا خیر).

set.seed(100)

setwd(“C:\\Users\\ts93856\\Desktop\\datasource”)

# load data

df_train = read_csv(“train_users_2.csv”)

df_test = read_csv(“test_users.csv”)

# Loading labels of train data

labels = df_train[‘labels’]

df_train = df_train[-grep(‘labels’, colnames(df_train))]

# combine train and test data

df_all = rbind(df_train,df_test)

مرحله ۳ : داده پالایی ( Data Cleaning ) و مهندسی ویژگی ها

clean Variables #  : در اینجا برای اصلاح داده ها، افراد با سن کمتر از ۱۴ یا بیشتر از ۱۰۰ سال را حذف می کنیم.

df_all[df_all$age < 14 | df_all$age > 100,’age’] <- -1

df_all$age[df_all$age < 0] <- mean(df_all$age[df_all$age > 0])

# one-hot-encoding categorical features

ohe_feats = c(‘gender’, ‘education’, ’employer’)

dummies <- dummyVars(~ gender + education + employer, data = df_all)

df_all_ohe <- as.data.frame(predict(dummies, newdata = df_all))

df_all_combined <- cbind(df_all[,-c(which(colnames(df_all) %in%

ohe_feats))],df_all_ohe)df_all_combined$agena <- as.factor(ifelse(df_all_combined$age < 0,1,0))

ما لیستی از متغیرها در ” feature_selected ” را برای مدل استفاده می کنیم. در این مقاله روشی سریع و هوشمند برای انتخاب متغیرها به اشتراک گذاشته ایم.

df_all_combined <- df_all_combined[,c(‘id’,features_selected)]

# split train and test

X = df_all_combined[df_all_combined$id %in% df_train$id,]

y <- recode(labels$labels,”‘True’=۱; ‘False’=۰)

X_test = df_all_combined[df_all_combined$id %in% df_test$id,]

مرحله ۴ : تنظیم و اجرای مدل

xgb <- xgboost(data = data.matrix(X[,-1]),

label = y,

eta = 0.1,

max_depth = 15,

nround=25,

subsample = 0.5,

colsample_bytree = 0.5,

seed = 1,

eval_metric = “merror”,

objective = “multi:softprob”,

num_class = 12,

nthread = 3

)

مرحله ۵ : امتیازدهی افراد آزمایشی

و درنهایت حالا یک  ” xgb ” دارید که یک مدل الگوریتم XGBoost است. در ادامه نحوه امتیازدهی به افراد آزمایشی آورده شده است :

# predict values in test set

y_pred <- predict(xgb, data.matrix(X_test[,-1]))

درباره دلایل آموزش  یادگیری ماشین بیشتر بخوانید

پارامتر های الگوریتم XGBoost 

الف. پارامترهای کلی

در ادامه پارامترهای کلی مورد استفاده در الگوریتم XGBoost آورده شده است :

  • silent : مقدار پیش فرض آن ۰ است. شما باید آن را برای چاپ پیام های در حال اجرا ۰ ، و برای حالت بی صدا ۱ تعیین کنید.
  • booster : مقدار پیش فرض آن gbtree است. شما باید تقویت کننده مورد استفاده را مشخص کنید: gbtree (مبتنی بر درخت) یا gblinear (تابع خطی).
  • num_pbuffer : این پارامتر به طور خودکار توسط الگوریتم XGBoost تنظیم می شود و نیازی به تنظیم توسط کاربر نیست. برای جزئیات بیشتر مقالات XGBoost را بخوانید.
  • num_feature : این پارامتر به طور خودکار توسط الگوریتم XGBoost تنظیم می شود و نیازی به تنظیم توسط کاربر نیست.

ب. پارامترهای تقویت کننده

در ادامه پارامترهای مخصوص درخت در الگوریتم XGBoost را مورد بحث قرار می دهیم :

  • eta : مقدار پیش فرض آن روی ۳ تنظیم شده است. برای جلوگیری از بیش برازش ، باید کاهش اندازه گام را که در بروزرسانی استفاده شده مشخص کنید. پس از هر مرحله تقویت ، می توان مستقیماً وزن ویژگی های جدید را بدست آورد. در واقع، eta وزن ویژگی ها را کاهش می دهد تا روند تقویت محافظه کارانه تر شود. دامنه تغییر eta از ۰ تا ۱ است. مقدار پایین eta به این معنی است که مدل نسبت به بیش برازش مقاوم تر است.
  • gamma : مقدار پیش فرض آن روی ۰ تنظیم شده است. برای ایجاد تقسیم بندی بیشتر روی گره برگ درخت ، باید حداقل کاهش زیان مورد نیاز را تعیین کنید. هرچه مقدار آن بزرگتر باشد ، الگوریتم محافظه کارتر خواهد بود. دامنه تغییر از ۰ تا بی نهایت است. gamma بزرگتر، برای الگوریتم محافظه کارانه تر است.
  • max_depth : مقدار پیش فرض آن روی ۶ تنظیم شده است. شما باید حداکثر عمق یک درخت را مشخص کنید. دامنه تغییر از ۰ تا بی نهایت است.
  • min_child_weight : مقدار پیش فرض آن روی ۱ تنظیم شده است. شما باید حداقل مجموع وزن نمونه(hessian)  مورد نیاز فرزند را مشخص کنید. اگر مرحله تقسیم درخت منجر به گره برگ شود آنگاه با مجموع وزن نمونه کمتر از min_child_weight  ، روند رشد درخت پایان می یابد. در حالت رگرسیون خطی ، مربوط به حداقل مواردی است که باید در هر گره وجود داشته باشد. این پارامتر هرچه بزرگتر باشد، الگوریتم محافظه کارتر خواهد بود. دامنه تغییر از ۰ تا بی نهایت است.
  • max_delta_step : مقدار پیش فرض آن روی ۰ تنظیم شده است. حداکثر مرحله دلتا که اجازه می دهد وزن هر درخت تخمین زده شود. اگر مقدار آن روی ۰ تنظیم شود ، به این معنی است که محدودیتی وجود ندارد. اگر روی مقدار مثبت تنظیم شود ، می تواند به محافظه کارانه تر شدن مرحله بروزرسانی کمک کند. معمولاً این پارامتر مورد نیاز نیست ، اما ممکن است در رگرسیون لجستیک کمک کند. بخصوص هنگامی که یک کلاس بسیار نامتعادل است. دامنه تغییر آن از ۰ تا بی نهایت است و تنظیم آن روی مقادیر ۱  تا ۱۰ ممکن است به کنترل بروزرسانی کمک کند.
  • subsample : مقدار پیش فرض آن ۱ است. شما باید نسبت تعداد زیرنمونه به نمونه آموزش را تعیین کنید. تنظیم آن روی ۵ به این معنی است که XGBoost به طور تصادفی نیمی از نمونه های داده را جمع آوری می کند. این نیاز به رشد درختان دارد و از بیش برازش جلوگیری خواهد کرد. دامنه تغییرات آن بین ۰ تا ۱ است.
  • colsample_bytree : مقدار پیش فرض روی ۱ تنظیم شده است. هنگام رشد هر درخت باید نسبت زیرنمونه ستون ها را مشخص کنید. دامنه تغییرات آن بین ۰ تا ۱ است.

ج. پارامترهای خاص تقویت کننده خطی

پارامترهای زیر پارامترهای خاص تقویت کننده خطی در الگوریتم XGBoost هستند.

  • lambda و alpha : این ها عبارات تنظیم کننده وزن ها هستند. مقدار پیش فرض lambda برابر ۱ و alpha  برابر ۰ فرض می شود.
  • lambda_bias : عبارت تنظیم کننده L2 در بایاس ، مقدار پیش فرض ۰ دارد.

د. پارامترهای وظیفه یادگیری

در ادامه پارامترهای وظیفه یادگیری در الگوریتم XGBoost آورده شده است.

  • base_score : مقدار پیش فرض روی ۵ تنظیم شده است. شما باید امتیاز پیش بینی اولیه تمام نمونه ها ، بایاس سراسری را مشخص کنید.
  • objective : مقدار پیش فرض آن روی reg: linear تنظیم شده است. شما باید نوع یادگیرنده مورد نظر خود را مشخص کنید. که شامل رگرسیون خطی ، رگرسیون پواسون و غیره است.
  • eval_metric : برای داده های اعتبار سنجی باید معیارهای ارزیابی را تعیین کنید. یک معیار پیش فرض با توجه به هدف تعیین می شود.
  • seed : شما به کمک این پارامتر، seed را برای تولید مجموعه خروجی های یکسان تعیین می کنید.

در مورد مزایا و معایب یادگیری ماشین مطالعه کنید

قابلیت پیشرفته الگوریتم XGBoost

می توان گفت XGBoost در مقایسه با سایر تکنیک های یادگیری ماشین ، بسیار ساده است. اگر تمام کار هایی که تاکنون انجام داده ایم را انجام دادید، الگوی شما آماده است.

بیایید یک قدم جلوتر برویم و سعی کنیم اهمیت متغیر را در مدل پیدا کنیم و لیست متغیرهای خود را در زیر مجموعه قرار دهیم.

# Lets start with finding what the actual tree looks like

model <- xgb.dump(xgb, with.stats = T)

model[1:10] #This statement prints top 10 nodes of the model

# Get the feature real names

names <- dimnames(data.matrix(X[,-1]))[[2]]

# Compute feature importance matrix

importance_matrix <- xgb.importance(names, model = xgb)

# Nice graph

xgb.plot.importance(importance_matrix[1:10,])

#In case last step does not work for you because of a version issue, you can try following :

barplot(importance_matrix[,1])

خب ، مباحث عنوان شده در مورد آموزش الگوریتم XGBoost بود. امیدوارم توضیحات ما را بپسندید.

نتیجه گیری

بدین ترتیب، ما مقدمه ای بر الگوریتم XGBoost داشتیم و در مورد کدنویسی الگوریتم XGBoost ، یک قابلیت پیشرفته الگوریتم XGboosting ، پارامترهای کلی ، پارامترهای تقویت کننده ، پارامترهای خاص تقویت کننده خطی و پارامترهای وظیفه یادگیری اطلاعاتی کسب کردیم. همچنین با مدل های ساخت و پارامترهای XGBoost نیز آشنا شدیم. علاوه بر این ، اگر سوالی دارید ، در بخش نظرات بپرسید.

بیشتر بخوانید :

درباره‌ی امیر اقتدائی

همچنین ببینید

بهترین ابزار های هوش مصنوعی 2021

بهترین ابزارهای هوش مصنوعی در سال ۲۰۲۱

به دنبال بهترین ابزارهای هوش مصنوعی سال ۲۰۲۱ هستید ؟ این حوزه یک بخش عظیم …

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *