آدابوست
آدابوست الگو:به انگلیسی تطبیقی بوده و یک الگوریتم یادگیری ماشین است که توسط یاو فروند و رابرت شاپیر اختراع شد.[۱] تطبیقی بودن آدابوست به این معناست که مدلها یکی پس از دیگری ساخته شده و عملکرد مدلهای قبلی بر روند مدلسازی مدلهای پس از آن تأثیر میگذارد.[۲] در واقع آدابوست یک متا الگوریتم است که به منظور ارتقاء عملکرد، و رفع مشکل ردههای نامتوازن[۳] همراه دیگر الگوریتمهای یادگیری استفاده میشود. در این الگوریتم، طبقهبندی هر مرحله جدید به نفع نمونههای غلط طبقهبندی شده در مراحل قبل تنظیم میگردد. آدابوست نسبت به دادههای نویزی و پرت حساس است؛ ولی نسبت به مشکل بیش برازش از بیشتر الگوریتمهای یادگیری برتری دارد. طبقهبندی پایه که در اینجا استفاده میشود فقط کافیست از طبقهبندی تصادفی (۵۰٪) بهتر باشد و به این ترتیب عملکرد الگوریتم در تکرارهای بیشتر بهبود مییابد. حتی طبقهبندهای با خطای بالاتر از تصادفی با گرفتن ضریب منفی عملکرد کلی را بهبود میبخشند.[۱] در الگوریتم آدابوست در هر دور یک طبقهبند ضعیف اضافه میشود. در هر فراخوانی بر اساس اهمیت نمونهها، وزنها بروز میشود. در هر دور وزن نمونههای غلط طبقهبندی شده افزایش و وزن نمونههای درست طبقهبندی شده کاهش داده میشود؛ بنابراین طبقهبند جدید تمرکز بر نمونههایی که سختتر یادگرفته میشوند، خواهند داشت.[۱] پس بهطور خلاصه این الگوریتم منطبق بر یادگیری گروهی میباشد. به بیان سادهتر طرز کار این الگوریتم به این صورت است که عملکرد مدلهایی که به تنهایی ضعیف عمل میکنند را با یکدیگر ترکیب کرده و باعث بهبود عملکرد آنها میشود. پس در نظرگرفتن پیشبینی که مجموع چند الگوریتم یادگیری ضعیف ارائه میدهد میتواند در نهایت به اندازهٔ عملکرد یک الگوریتم قوی قابل اتکا باشد.[۲]
الگوریتم طبقهبندی دوگانه
داده شدهها:
- مجموعه یادگیری: که
- تعداد تکرارها:
مقداردهی اولیه: برای
- برای خانواده طبقهبندهای ضعیف ℋ طبقهبند را پیدا کن که میزان خطا نسبت به توزیع کمینه شود، در این معادله یک تابع نشانگر است:
الگو:وسطچین الگو:پایان وسطچین خطای را با نمایش میدهیم: الگو:وسطچین الگو:پایان وسطچین
- اگر که یک آستانه تعیین شده قبلی است، توقف انجام شود.
- معمولاً مقدار برای در نظر گرفته میشود.
- بروز رسانی:
الگو:وسطچین الگو:پایان وسطچین
- که یک عامل نرمالسازی با مقدار است که موجب میشود یک توزیع احتمالاتی مجاز را نشان دهد (مجموع روی همه ها یک شود)
- خروجی نهایی طبقهبند
الگو:وسطچین الگو:پایان وسطچین
- توجه شود که معادله بروز رسانی توزیع بگونهای بروز میشود که
الگو:پایان وسطچین بنابراین بعد از انتخاب بهینه طبقهبند برای توزیع آندسته از نمونهها که طبقهبند آنها را غلط طبقهبندی میکند وزن بیشتری نسبت به بقیه داده میشود؛ بنابراین وقتی الگوریتم طبقهبندها را براساس توزیع تست میکند، طبقهبندی انتخاب میشود که نمونههای غلط طبقهبندی شده را بهتر تشخیص دهد.
مراحل الگوریتم آدابوست
الگوریتم آدابوست مطابق مراحل زیر به صورت مکرر کار میکند
- در ابتدا برای این الگوریتم الزامی است یک زیرمجموعه آموزشی انتخاب شود.
- با استفاده از مجموعه آموزشی که بر اساس پیشبینی صحیح آخرین آموزش ایجاد شده به صورت مکرر مدل یادگیریماشینی آدابوست را آموزش میدهیم.
- تمام نمونههای آموزشی در فرایند آموزش دارای وزنی خواهند بود که براساس خطای ناشی از مدل یادگیریماشین بهدست میآید. این الگوریتم وزن بالاتری را به مشاهداتی که به صورت اشتباه طبقهبندی شدهاند اختصاص میدهد تا در تکرارهای بعدی این مشاهدات برای فرایند طبقهبندی احتمال بالاتری را بهدست آورند.
- در مرحله بعد طبقهبندهایی که آموزش دیده شدهاند وزندهی میشوند. هرچه طبقهبندی دقیقتر باشد وزن بالاتری خواهد داشت.
- این مراحل تا زمانی تکرار میشوند که دادههای آموزشی کامل و بدون هیچ خطایی توسط مدل آموزش ببیند.
- برای انجام طبقهبندی کافی است یک رای به ازای هر الگوریتم یادگیری ساختهشده در نظر گرفته شود.[۴]
ایجاد مدل در پایتون
در این مرحله مطابق کد زیر کتابخانههای مورد نیاز را وارد میکنیم.
# Load libraries
from sklearn.ensemble import AdaBoostClassifier
from sklearn import datasets
# Import train_test_split function
from sklearn.model_selection import train_test_split
# Import scikit-learn metrics module for accuracy calculation
from sklearn import metrics
در مرحله بعد از یک مجموعهداده برای بررسی مدل روی آن استفاده میکنیم.
# Load data
iris = datasets.load_iris()
X = iris.data
y = iris.target
سپس مجموعهداده را به دو قسمت آموزش و تست تقسیم میکنیم.
# Split dataset into training set and test set
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3) # 70% training and 30% test
در نهایت یک مدل آدابوست روی مجموعهداده اجرا میکنیم.
# Create adaboost classifer object
abc = AdaBoostClassifier(n_estimators=۵۰,
learning_rate=۱)
# Train Adaboost Classifer
model = abc.fit(X_train, y_train)
# Predict the response for test dataset
y_pred = model.predict(X_test)
اثبات و فهم ریاضی آدابوست
عمل تقویت کردن را میتوان به صورت حداقل کردن یک تابع هزینه محدب روی یک مجموعه محدب از توابع در نظر گرفت.[۵] بهطور خاص تابعی که حداقل میشود نمایی است: الگو:وسطچین الگو:پایان وسطچین و ما بهدنبال تابعی به شکل زیر هستیم:[۶] الگو:وسطچین الگو:پایان وسطچین مجهولِ تابع هزینه ، است که خود به بستگی دارد. در نتیجه بهینهسازی تابع هزینه در نهایت باید نسبت به صورت بگیرد.
حال برای راحتتر شدن کار فرض میکنیم که مقادیر ثابت هستند و هدف ما پیدا کردن و است. با این اوصاف تابع را میتوان به شکل پایین نوشت: الگو:وسطچین الگو:پایان وسطچین اگر را با نمایش دهیم، تابع هزینه ما به شکل پایین تغییر شکل خواهد داد:[۶] الگو:وسطچین الگو:پایان وسطچین اگر مجموعه تمام دادههایی که توسط به درستی پیشبینی میشوند را با و مجموعه تمام دادههایی که توسط نادرست پیشبینی میشوند را با نمایش دهیم. تابع هزینه به شکل پایین تغییر خواهد کرد: الگو:وسطچین الگو:پایان وسطچین حال اگر را نسبت به بهینه کنیم، از آنجا که و نسبت به ثابت هستند، فقط باید را نسبت به کمینه کنیم؛ یعنی
بعد از پیدا کردن باید را پیدا کنیم اگر را بنامیم تابع هزینه ما تبدیل میشود به که اگر از آن نسبت به مشتق بگیریم و جواب را در نقطه صفر بهدست بیاوریم به این جواب میرسیم: .
حال که و را پیدا کردیم باید ببینیم که به چه شکل نسبت به بروز میشود. همان است یعنی الگو:وسطچین الگو:پایان وسطچین پس ارتباط با به این شکل خواهد بود:[۶] الگو:وسطچین الگو:پایان وسطچین از آنجا که بهروز کردن به این شکل تغییر خواهد کرد: الگو:وسطچین الگو:پایان وسطچین اگر تمام ها را در یک مقدار ثابتی ضرب کنیم تأثیری در جواب نهایی و و نخواهد داشت. ازین رو همیشه میتوان مقدار آنها را نرمالسازی کرد. با نرمالسازی به معادله بازگشتی پایین میرسیم، در این معادله : الگو:وسطچین الگو:پایان وسطچین همان است، و از آنجا که در جواب تأثیری ندارد، میتوان آن را حذف کرد. حال اگر را همان بگیریم به الگوریتم آدابوست خواهیم رسید.[۶]
جستارهای وابسته
منابع
پیادهسازیها
- AdaBoost and the Super Bowl of Classifiers - A Tutorial on AdaBoost.
- Adaboost in C++, an implementation of Adaboost in C++ and boost by Antonio Gulli
- icsiboost, an open source implementation of Boostexter
- JBoost, a site offering a classification and visualization package, implementing AdaBoost among other boosting algorithms.
- MATLAB AdaBoost toolbox. Includes Real AdaBoost, Gentle AdaBoost and Modest AdaBoost implementations.
- A Matlab Implementation of AdaBoost
- milk الگو:Webarchive for Python implements AdaBoost.
- MPBoost++, a C++ implementation of the original AdaBoost.MH algorithm and of an improved variant, the MPBoost algorithm.
- NPatternRecognizer الگو:Webarchive, a fast machine learning algorithm library written in C#. It contains support vector machine, neural networks, bayes, boost, k-nearest neighbor, decision tree, … , etc.
- OpenCV implementation of several boosting variants
- Into contains open source implementations of many AdaBoost and FloatBoost variants in C++.
پیوند به بیرون
- Boosting.org, a site on boosting and related ensemble learning methods
- AdaBoost Presentation summarizing Adaboost (see page 4 for an illustrated example of performance)
- A Short Introduction to Boosting Introduction to Adaboost by Freund and Schapire from 1999
- A decision-theoretic generalization of on-line learning and an application to boosting Journal of Computer and System Sciences, no. 55. 1997 (Original paper of Yoav Freund and Robert E.Schapire where Adaboost is first introduced.)
- An applet demonstrating AdaBoost
- Ensemble Based Systems in Decision Makingالگو:پیوند مرده, R. Polikar, IEEE Circuits and Systems Magazine, vol.6, no.3, pp. 21–45, 2006. A tutorial article on ensemble systems including pseudocode, block diagrams and implementation issues for AdaBoost and other ensemble learning algorithms.
- Additive logistic regression: a statistical view of boosting by Jerome Friedman, Trevor Hastie, Robert Tibshirani. Paper introducing probabilistic theory for AdaBoost, and introducing GentleBoost
- ↑ ۱٫۰ ۱٫۱ ۱٫۲ Yoav Freund, Robert E. Schapire. "A Decision-Theoretic Generalization of on-Line Learning and an Application to Boosting", 1995
- ↑ ۲٫۰ ۲٫۱ https://towardsdatascience.com/adaboost-in-7-simple-steps-a89dc41ec4
- ↑ الگو:یادکرد وب
- ↑ ۴٫۰ ۴٫۱ https://www.datacamp.com/tutorial/adaboost-classifier-python
- ↑ T. Zhang, "Statistical behavior and consistency of classification methods based on convex risk minimization", Annals of Statistics 32 (1), pp. 56-85, 2004.
- ↑ ۶٫۰ ۶٫۱ ۶٫۲ ۶٫۳ الگو:یادکرد کتاب