0
09922334435

Adaptive Boosting یا AdaBoost Algorithm در یادگیری ماشین

فهرست مطالب

آشنایی با AdaBoost

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

 

Boosting یک تکنیک مجموعه ای است که تلاش می کند یک طبقه بندی قوی از تعدادی طبقه بندی کننده ضعیف ایجاد کند.

 

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

 

AdaBoost بهتر است برای تقویت عملکرد درخت تصمیم در مسائل طبقه بندی باینری استفاده شود.

AdaBoost می تواند برای افزایش عملکرد هر الگوریتم یادگیری ماشینی استفاده شود.

 

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

 

بنابراین در این مقاله از روش درخت تصمیم و جنگل تصادفی برای درک مفاهیم AdaBoost استفاده می کنیم. چگونه از آن برای طبقه بندی بهتر استفاده می شود.

 

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

آیا AdaBoost برای رگرسیون استفاده می شود یا طبقه بندی؟

بنابراین در ادامه ۳ مفهوم اصلی الگوریتم Adaboost را خواهیم دید.

مفاهیم اصلی Adaboost

تفاوت بین جنگل تصادفی و adaboost چیست؟

اگر به الگوریتم جنگل تصادفی دقت کنید، درختان ممکن است از درختی به درخت دیگر بزرگتر باشند، اما در مقابل، جنگل تصادفی ساخته شده توسط adaboost معمولاً فقط یک گره و دو برگ دارد (درختی با یک گره و دو برگ را کنده می گویند).

 

پس adaboost جنگلی از کنده است. کنده ها در طبقه بندی دقیق نیستند.

: درک AdaBoost با استفاده از Decision Stumps

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

 

بنابراین در فرایند یادگیری ضعفی وجود دارد اما Adaboost از این استامپ استفاده می کند و در نهایت نتیجه خوبی دارد.

مقایسه رگرسیون خطی (و لجستیک) با AdaBoosting

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

 

در نهایت، در یک جنگل تصادفی، هر درخت تصمیم مستقل از یکدیگر است (یعنی یک درخت به درختان دیگر بستگی ندارد) اما در Adaboost هر کنده به خطای قبلی بستگی دارد (یعنی خطایی که کنده اول بر کار درخت دوم تأثیر می گذارد).

پیاده سازی Adaboost

تا اینجای کار با مفاهیم اصلی Adaboost آشنا شدیم حالا بیایید به روند پیاده سازی آن بپردازیم!!

مثال بیماری قلبی بالا را در نظر بگیرید، ابتدا کاری که ما انجام خواهیم داد این است که به طور تصادفی وزن دهی می‌کنیم. در ابتدا (برای کنده اول) همه نمونه ها دارای وزن یکسانی هستند. به این معنا که،

وزن نمونه = ۱% تعداد نمونه ها در dataset

ریاضیات AdaBoost
				
					#<-------------AdaBoost------------->
#Import the Libraries
import numpy as np
import pandas as pd

#Import the Dataset
Dataset = pd.read_csv("iris_dataset.csv")
X = Dataset.iloc[:,:-1].values
y = Dataset.iloc[:, -1].values

#Splitting the data into train and test
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,random_state=32)

#Adaboost classifier
from sklearn.ensemble import AdaBoostClassifier
classifier2 = AdaBoostClassifier(random_state=0)
classifier2.fit(X_train, y_train)

#predict our test set
y_pred2 = classifier2.predict(X_test)

#evaluate our test set
from sklearn.metrics import confusion_matrix, accuracy_score, f1_score

acc_test2 = accuracy_score(y_test, y_pred2)
f1_test2 = f1_score(y_test, y_pred2, average= 'weighted')

print("Test set results")
print("ACCURACY for test set(Adaboost classifier method)",acc_test2)
print("F1 SCORE for test set(Adaboost classifier method)",f1_test2)

				
			

نتیجه گیری

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

 

جابجایی از رگرسیون خطی به مجموعه‌ای از خرده تصمیم ها (معروف به AdaBoost) به ما امکان می‌دهد تا بسیاری از این روابط غیرخطی را کشف کنیم.

منابع

https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html

ارسال دیدگاه

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