الگوریتم بوت کردن گرادیان چگونه کار می‌کند؟

شکل ۱. الگوریتم‌ها
شکل ۱. الگوریتم‌ها
منتشر‌شده در analyticsvidhya به تاریخ ۱۹ آوریل ۲۰۲۱
لینک منبع How the Gradient Boosting Algorithm works?

مقدمه

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

برخلاف الگوریتم آدابوستینگ Adaboosting ، برآورد‌کننده پایه در الگوریتم افزایش گرادیان را نمی‌توان توسط ما ذکر کرد. براوردگر پایه برای الگوریتم بوست گرادیان ثابت است و به عنوان مثال تصمیم‌گیرنده است. مانند آدبوست، ما می‌توانیم n _ تخمین‌گر الگوریتم افزایش گرادیان را تنظیم کنیم. با این حال، اگر مقدار n _ تخمین‌گر را ذکر نکنیم، مقدار پیش‌فرض n _ تخمین‌گر برای این الگوریتم ۱۰۰است.

الگوریتم تقویت گرادیان می‌تواند نه تنها برای پیش‌بینی متغیر هدف پیوسته (به عنوان یک رگرسور) بلکه برای متغیر هدف مطلق (به عنوان یک دسته‌بندی کننده) نیز مورد استفاده قرار گیرد. هنگامی که از آن به عنوان یک رگرسور استفاده می‌شود، تابع هزینه میانگین مربع خطا (MSE) است و هنگامی که به عنوان یک طبقه‌بندی کننده استفاده می‌شود، تابع هزینه از دست دادن لگاریتمی است.

این مقاله موضوعات زیر را در ارتباط با الگوریتم راه‌اندازی Gradient پوشش می‌دهد:

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

۱) مثال راهنما برای درک الگوریتم:

حال بیایید کار الگوریتم راه‌اندازی گرادیان را با کمک یک مثال درک کنیم. در مثال زیر، سن متغیر هدف است در‌حالی‌که تمرین لیکود، ورزش، رانندگی متغیرهای مستقل هستند. همانطور که در این مثال، متغیر هدف پیوسته است، در اینجا از GradientBostingRegمولکولی استفاده می‌شود.

اولین-براورد کننده

برای برآورد کننده-۱، سطح ریشه (سطح ۰) شامل تمام رکوردها خواهد بود. سن پیش‌بینی‌شده در این سطح برابر با میانگین کل ستون سنی است یعنی ۴۱.۳۳ (اضافه کردن تمام مقادیر در ستون سنی تقسیم‌بر تعدادی از رکوردها یعنی ۹). بیایید بدانیم کهMSE برای این سطح چیست. خود توانی به عنوان میانگین مربع خطاها محاسبه می‌شود. در اینجا خطا برابر با سن پیش‌بینی‌شده واقعی است. سن پیش‌بینی‌شده برای گره خاص همیشه برابر با میانگین رکوردهای سنی آن گره است. بنابراین، MSE گره ریشه تخمین زننده اول به صورت زیر محاسبه می‌شود.

MSE=(∑(Agei –mu)2 )/9=577.11

تابع هزینه آن MSE است و هدف الگوریتم در اینجا به حداقل رساندنMSE است.

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

شکل ۲. گره‌های MSE
شکل ۲. گره‌های MSE

بیایید ابزارها و MSE های هر دو گره سطح ۱ را پیدا کنیم. برای گره چپ، میانگین برابر با ۲۰.۲۵ و MSE برابر با ۸۳.۱۹ است. در‌حالی‌که، برای گره راست، میانگین برابر با ۵۸.۲وMSE برابر با ۳۳۲.۱۶ است. مجموع MSE برای سطح ۱ برابر با اضافه شدن تمام گره‌های سطح ۱ خواهد بود یعنی ۸۳.۱۹ + ۳۳۲.۱۶ = ۴۱۵.۳۵.

در اینجا می‌توانیم ببینیم که تابع هزینه یعنی MSE سطح ۱ بهتر از سطح ۰ است.

دومین-برآورد کننده:

حال بیایید برآورد کننده-۲ را پیدا کنیم. برخلاف آدابوست، در الگوریتم تقویت گرادیان، باقی مانده‌های اولین تخمین‌زننده به عنوان گره‌های ریشه در نظر گرفته می‌شوند که در زیر نشان داده شده است. فرض کنید برای این تخمین‌گر متغیر وابسته دیگری برای پیش‌بینی استفاده می‌شود.

شکل ۳. نمودار دومین برآوردکننده
شکل ۳. نمودار دومین برآوردکننده

بنابراین، سوابق با GotoGym اشتباه همان طور که در زیر نشان داده شده است، در یک گره فرزند دیگر نیز ثبت می‌شود. پیش‌بینی سن در اینجا کمی دشوار است.

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

بیایید در نظر بگیریم که آیا می‌خواهیم سن رکوردهای زیر را پیش‌بینی کنیم:

در اینجا، تمرین احتمال برابر با اشتباه است. بنابراین، سن پیش‌بینی‌شده از اولین برآورد کننده ۲۰.۲۵ خواهد بود (یعنی میانگین گره چپ اولین تخمین‌گر). حالا ما باید بررسی کنیم که ارزش GotoGym برای دومین پیش‌بینی‌کننده چیست و ارزش آن درست است یا نه. بنابراین، میانگین ورزش واقعی در دومین برآورد کننده-۳.۵۶ است. این به پیش‌بینی اولین برآورد کننده یعنی ۲۰.۲۵. اضافه خواهد شد.

بنابراین پیش‌بینی نهایی این مدل ۲۰.۲۵ + (-۳.۵۶) = ۱۶.۶۹خواهد بود. اجازه دهید سن تمام رکوردهایی که در این مثال داریم را پیش‌بینی کنیم.

حال بیایید جدول نهایی MSE را برای بیش از ۹ رکورد پیدا کنیم.

MSE= ((-2.69)2 +(-1.69)2 + (-0.69)2 +(-28.64)2 +(19.31)2 +(-15.33)2 + (14.36)2 +(6.67)2 +(7.67)2 )/9 = 194.2478

بنابراین ما می‌توانیم ببینیم که MSE نهایی بسیار بهتر از MSE گره ریشه اولین برآورد کننده است.۱۹۴.۲۴۷۸ این فقط برای ۲ تخمین زن است. تعداد n تخمین زن در الگوریتم تقویت گرادیان وجود دارد.

۲) کد پایتون برای همین منظور:

اکنون اجازه دهید یک کد پایتون برای همین منظور بنویسیم.

# Importing required modules
import numpy as np
import pandas as pd
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.preprocessing import LabelEncoder
# Let us create the Data-Frame for above
X=pd.DataFrame({'LikesExercising':[False,False,False,True,False,True,True,True,True],
'GotoGym':[True,True,True,True,True,False,True,False,False],
'DrivesCar':[True,False,False,True,True,False,True,False,True]})
Y=pd.Series(name='Age',data=[14,15,16,26,36,50,69,72,74])
# Let us encode true and false to number value 0 and 1
LE=LabelEncoder()
X['LikesExercising']=LE.fit_transform(X['LikesExercising'])
X['GotoGym']=LE.fit_transform(X['GotoGym'])
X['DrivesCar']=LE.fit_transform(X['DrivesCar'])
#We will now see the effect of different numbers of estimators on MSE.
# 1) Let us now use GradientBoostingRegressor with 2 estimators to train the model and to predict the age for the same inputs.
GB=GradientBoostingRegressor(n_estimators=2)
GB.fit(X,Y)
Y_predict=GB.predict(X) #ages predicted by model with 2 estimators
Y_predict
# Output
#Y_predict=[38.23 , 36.425, 36.425, 42.505, 38.23 , 45.07 , 42.505, 45.07 ,47.54]
#Following code is used to find out MSE of prediction with Gradient boosting algorithm having estimator 2.
MSE_2=(sum((Y-Y_predict)**2))/len(Y)
print('MSE for two estimators :',MSE_2)
#Output: MSE for two estimators : 432.482055555546
# 2) Let us now use GradientBoostingRegressor with 3 estimators to train the model and to predict the age for the same inputs.
GB=GradientBoostingRegressor(n_estimators=3)
GB.fit(X,Y)
Y_predict=GB.predict(X) #ages predicted by model with 3 estimators
Y_predict
# Output
#Y_predict=[36.907, 34.3325, 34.3325, 43.0045, 36.907 , 46.663 , 43.0045, 46.663 , 50.186]
#Following code is used to find out MSE of prediction with Gradient boosting algorithm having estimator 3.
MSE_3=(sum((Y-Y_predict)**2))/len(Y)
print('MSE for three estimators :',MSE_3)
#Output: MSE for three estimators : 380.05602055555556
# 3) Let us now use GradientBoostingRegressor with 50 estimators to train the model and to predict the age for the same inputs.
GB=GradientBoostingRegressor(n_estimators=50)
GB.fit(X,Y)
Y_predict=GB.predict(X) #ages predicted by model with 50 estimators
Y_predict
# Output
#Y_predict=[25.08417833, 15.63313919, 15.63313919, 47.46821839, 25.08417833, 60.89864242, 47.46821839, 60.89864242, 73.83164334]
#Following code is used to find out MSE of prediction with Gradient boosting algorithm having estimator 50.
MSE_50=(sum((Y-Y_predict)**2))/len(Y)
print('MSE for fifty estimators :',MSE_50)

مشاهدات:

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

مطالعه مقاله توسعه مبتنی بر ترانک (Trunk) چیست؟ توصیه می‌شود.

۳) پیدا کردن بهترین تخمین زن با GridchCV:

حال ببینیم که چگونه می‌توان از GridchCV برای یافتن بهترین تخمین‌گر برای مثال بالا استفاده کرد.

from sklearn.model_selection import GridSearchCV
model=GradientBoostingRegressor()
params={'n_estimators':range(1,200)}
grid=GridSearchCV(estimator=model,cv=2,param_grid=params,scoring='neg_mean_squared_error')
grid.fit(X,Y)
print(&quotThe best estimator returned by GridSearch CV is:&quot,grid.best_estimator_)
#Output
#The best estimator returned by GridSearch CV is: GradientBoostingRegressor(n_estimators=19)
GB=grid.best_estimator_
GB.fit(X,Y)
Y_predict=GB.predict(X)
Y_predict
#output:
#Y_predict=[27.20639114, 18.98970027, 18.98970027, 46.66697477, 27.20639114,58.34332496, 46.66697477, 58.34332496, 69.58721772]
MSE_best=(sum((Y-Y_predict)**2))/len(Y)
print('MSE for best estimators :',MSE_best)
#Following code is used to find out MSE of prediction for Gradient boosting algorithm with best estimator value given by GridSearchCV
#Output: MSE for best estimators : 164.2298548605391

مشاهدات:

شما ممکن است فکر کنید کهMSE برای n-تخمین‌گر = ۵۰ بهتر از MSE برای n-تخمین‌گر = ۱۹ است. با این حال GridchCV با ۱۹ و نه ۵۰ باز می‌گردد. در واقع، ما می‌توانیم در اینجا مشاهده کنیم که تا ۱۹ با هر افزایش در مقدار تخمینگر کاهش درMSE قابل‌توجه بود، اما بعد از ۱۹ هیچ کاهش قابل‌توجهی درMSE با افزایش در تخمینگرها وجود ندارد.

بنابراین برآورد کننده n = ۱۹ توسط GridchSV براورد شد.

۴) برنامه‌های کاربردی:

الف) الگوریتم بوت کردن گرادیان به طور کلی زمانی استفاده می‌شود که می‌خواهیم خطای Bias را کاهش دهیم. ب) الگوریتم بوت کردن گرادیان می‌تواند در رگرسیون و همچنین مسائل طبقه‌بندی استفاده شود.

در مسائل رگرسیون، تابع هزینهMSE است در‌حالی‌که در مسائل طبقه‌بندی، تابع هزینه log-loss است.

۵) نتیجه‌گیری:

در این مقاله، من سعی کردم توضیح دهم که چگونه راه‌اندازی Gradient در واقع با کمک یک مثال ساده کار می‌کند. الگوریتم راه‌اندازی گرادیان به طور کلی زمانی استفاده می‌شود که می‌خواهیم خطایBias را کاهش دهیم. در اینجا، مثالی ازGradientBostingRegover نشان داده شده است. راهنمای راه‌اندازی گرادیان نیز وجود دارد که برای مشکلات طبقه‌بندی استفاده می‌شود.

در اینجا، در رگرسیون MSE به عنوان تابع هزینه در طبقه‌بندی Log-loss به عنوان تابع هزینه استفاده می‌شود. مهم‌ترین چیز در این الگوریتم یافتن بهترین مقدار n _ تخمینگرها است. در این مقاله، ما مشاهده کرده‌ایم که چگونه می توان از GridrochCV برای رسیدن به این هدف استفاده کرد.

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