**آدابوست** (به انگلیسی: **AdaBoost**) تطبیقی بوده و یک الگوریتم یادگیری ماشین است که توسط یاو فروند و رابرت شاپیر اختراع شد. 
تطبیقی بودن آدابوست به این معناست که مدلها یکی پس از دیگری ساخته شده و عملکرد مدل های قبلی بر روند مدل سازی مدل های پس از آن تاثیر می گذارد.در واقع آدابوست یک متا الگوریتم است که به منظور ارتقاء عملکرد، و رفع مشکل رده‌های نامتوازن همراه دیگر الگوریتم‌های یادگیری استفاده می‌شود. در این الگوریتم، طبقه‌بندی هر مرحله جدید به نفع نمونه‌های غلط طبقه‌بندی شده در مراحل قبل تنظیم می‌گردد. آدابوست نسبت به داده‌های نویزی و پرت حساس است؛ ولی نسبت به مشکل بیش برازش از بیشتر الگوریتم‌های یادگیری برتری دارد. طبقه‌بندی پایه که در اینجا استفاده می‌شود فقط کافیست از طبقه‌بندی تصادفی (۵۰٪) بهتر باشد و به این ترتیب عملکرد الگوریتم در تکرارهای بیشتر بهبود می‌یابد. حتی طبقه‌بندهای با خطای بالاتر از تصادفی با گرفتن ضریب منفی عملکرد کلی را بهبود می‌بخشند. در الگوریتم آدابوست در هر دور {\displaystyle t=1,\ldots ,T} یک طبقه‌بند ضعیف اضافه می‌شود. در هر فراخوانی بر اساس اهمیت نمونه‌ها، وزن‌ها {\displaystyle D\_{t}} بروز می‌شود. در هر دور وزن نمونه‌های غلط طبقه‌بندی شده افزایش و وزن نمونه‌های درست طبقه‌بندی شده کاهش داده می‌شود؛ بنابراین طبقه‌بند جدید تمرکز بر نمونه‌هایی که سخت‌تر یادگرفته می‌شوند، خواهند داشت.
پس به طور خلاصه این الگوریتم منطبق بر یادگیری گروهی می باشد.به بیان ساده‌تر طرز کار این الگوریتم به این صورت است که عملکرد مدلهایی که به تنهایی ضعیف عمل می‌کنند را با یکدیگر ترکیب کرده و باعث بهبود عملکرد آنها می‌شود.پس در نظرگرفتن پیش‌بینی که مجموع چند الگوریتم یادگیری ضعیف ارائه می‌دهد می‌تواند در نهایت به اندازه‌ی عملکرد یک الگوریتم قوی قابل اتکا باشد.

الگوریتم طبقه‌بندی دوگانه
-------------------------

داده شده‌ها:

* مجموعه یادگیری: {\displaystyle (x\_{1},y\_{1}),\ldots ,(x\_{N},y\_{N})} که {\displaystyle x\_{i}\in X,\,y\_{i}\in Y=\{-1,+1\}}
* تعداد تکرارها: T

مقداردهی اولیه: {\displaystyle \textstyle D\_{1}(i)={\frac {1}{N}},i=1,\ldots ,N.} برای {\displaystyle t=1,\ldots ,T}

* برای خانواده طبقه‌بندهای ضعیف ℋ طبقه‌بند {\displaystyle h\_{t}\,\!} را پیدا کن که میزان خطا نسبت به توزیع {\displaystyle D\_{t}} کمینه شود، در این معادله I یک تابع نشانگر است:

{\displaystyle h\_{t}={\underset {h\in {\mathcal {H}}}{\operatorname {argmin} }}\;\sum \_{i=1}^{N}D\_{t}(i)I(y\_{i}\neq h(x\_{i}))}

خطای {\displaystyle h\_{t}} را با {\displaystyle \epsilon \_{t}} نمایش می‌دهیم:

{\displaystyle \epsilon \_{t}=\sum \_{i=1}^{N}D\_{t}(i)I(y\_{i}\neq h\_{t}(x\_{i}))}

* اگر {\displaystyle \left\vert 0.5-\epsilon \_{t}\right\vert \leq \beta } که \beta  یک آستانه تعیین شده قبلی است، توقف انجام شود.
* معمولاً مقدار {\displaystyle \alpha \_{t}={\frac {1}{2}}{\textrm {ln}}{\frac {1-\epsilon \_{t}}{\epsilon \_{t}}}} برای {\displaystyle \alpha \_{t}\in \mathbb {R} } در نظر گرفته می‌شود.
* بروز رسانی:

{\displaystyle D\_{t+1}(i)={\frac {D\_{t}(i)\exp \left(\alpha \_{t}I(y\_{i}\neq h\_{t}(x\_{i}))\right)}{Z\_{t}}}}

که {\displaystyle Z\_{t}} یک عامل نرمال‌سازی با مقدار {\displaystyle \sum \_{i}D\_{t}(i)\exp(-\alpha \_{t}y\_{i}h\_{t}(x\_{i}))\,\!} است که موجب می‌شود {\displaystyle D\_{t+1}} یک توزیع احتمالاتی مجاز را نشان دهد (مجموع روی همه x‌ها یک شود)
خروجی نهایی طبقه‌بند

{\displaystyle H(x)={\textrm {sign}}\left(\sum \_{t=1}^{T}\alpha \_{t}h\_{t}(x)\right)}

توجه شود که معادله بروز رسانی توزیع {\displaystyle D\_{t}} بگونه‌ای بروز می‌شود که

{\displaystyle -\alpha \_{t}y\_{i}h\_{t}(x\_{i}){\begin{cases}<0,&y(i)=h\_{t}(x\_{i})\\>0,&y(i)\neq h\_{t}(x\_{i})\end{cases}}}

بنابراین بعد از انتخاب بهینه طبقه‌بند {\displaystyle h\_{t}\,} برای توزیع {\displaystyle D\_{t}\,} آندسته از نمونه‌ها {\displaystyle x\_{i}\,} که طبقه‌بند {\displaystyle h\_{t}\,} آن‌ها را غلط طبقه‌بندی می‌کند وزن بیشتری نسبت به بقیه داده می‌شود؛ بنابراین وقتی الگوریتم طبقه‌بندها را براساس توزیع {\displaystyle D\_{t+1}\,} تست می‌کند، طبقه‌بندی انتخاب می‌شود که نمونه‌های غلط طبقه‌بندی شده را بهتر تشخیص دهد.

مراحل الگوریتم آدابوست
----------------------

الگوریتم آدابوست مطابق مراحل زیر به صورت مکرر کار می کند

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

ایجاد مدل در پایتون
-------------------

در این مرحله مطابق کد زیر کتابخانه‌های مورد نیاز را وارد می‌کنیم.

```
# 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=50,
                         learning\_rate=1)
# Train Adaboost Classifer
model = abc.fit(X\_train, y\_train)
#Predict the response for test dataset
y\_pred = model.predict(X\_test)

```

اثبات و فهم ریاضی آدابوست
-------------------------

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

{\displaystyle E=\sum \_{i=1}^{N}{\mbox{exp}}({-y\_{i}\times f\_{m}(x\_{i})})}

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

{\displaystyle f\_{m}(x)={\frac {1}{2}}\sum \_{t=1}^{m}\alpha \_{t}h\_{t}(x)\,\!}

مجهولِ تابع هزینه E، {\displaystyle f\_{m}(\cdot )} است که خود به {\displaystyle \alpha \_{1},\cdots ,\alpha \_{m},h\_{1},\cdots ,\alpha \_{m}} بستگی دارد. در نتیجه بهینه‌سازی تابع هزینه در نهایت باید نسبت به {\displaystyle \alpha \_{1},\cdots ,\alpha \_{m},h\_{1},\cdots ,h\_{m}} صورت بگیرد.

حال برای راحتتر شدن کار فرض می‌کنیم که مقادیر {\displaystyle \alpha \_{1},\cdots ,\alpha \_{m-1},h\_{1},\cdots ,h\_{m-1}} ثابت هستند و هدف ما پیدا کردن {\displaystyle \alpha \_{m}}و {\displaystyle h\_{m}} است. با این اوصاف تابع Eرا می‌توان به شکل پایین نوشت:

{\displaystyle E=\sum \_{i=1}^{N}{\mbox{exp}}\left({-y\_{i}\times \left(f\_{m-1}(x\_{i})+{\frac {1}{2}}\alpha \_{m}h\_{m}(x\_{i})\right)}\right)=\sum \_{i=1}^{N}{\mbox{exp}}\left({-y\_{i}\times f\_{m-1}(x\_{i})}\right){\mbox{exp}}\left({-{\frac {1}{2}}y\_{i}\times \alpha \_{m}h\_{m}(x\_{i})}\right)}

اگر {\displaystyle {\mbox{exp}}({-y\_{i}\times f\_{m-1}(x\_{i})})}را با {\displaystyle w\_{i}^{(m)}} نمایش دهیم، تابع هزینه ما به شکل پایین تغییر شکل خواهد داد:

{\displaystyle E=\sum \_{i=1}^{N}w\_{i}^{(m)}e^{-{\frac {1}{2}}y\_{i}\times \alpha \_{m}h\_{m}(x\_{i})}}

اگر مجموعه تمام داده‌هایی که توسط {\displaystyle h\_{m}(\cdot )}به درستی پیش‌بینی می‌شوند را با {\displaystyle \mathrm {T} \_{m}} و مجموعه تمام داده‌هایی که توسط {\displaystyle h\_{m}(\cdot )} نادرست پیش‌بینی می‌شوند را با {\displaystyle M\_{m}} نمایش دهیم. تابع هزینه به شکل پایین تغییر خواهد کرد:

{\displaystyle {\begin{aligned}E&={\mbox{exp}}\left({-{\frac {\alpha \_{m}}{2}}}\right)\sum \_{i\in \mathrm {T} \_{m}}w\_{i}^{(m)}+{\mbox{exp}}\left({\frac {\alpha \_{m}}{2}}\right)\sum \_{i\in M\_{m}}w\_{i}^{(m)}\\&=\left({\mbox{exp}}\left({\frac {\alpha \_{m}}{2}}\right)-{\mbox{exp}}\left({-{\frac {\alpha \_{m}}{2}}}\right)\right)\sum \_{i=1}^{N}w\_{i}^{(m)}I\left(h\_{m}(x\_{i})\neq y\_{i}\right)+{\mbox{exp}}\left({-{\frac {\alpha \_{m}}{2}}}\right)\sum \_{i=1}^{N}w\_{i}^{(m)}\end{aligned}}}

حال اگر {\displaystyle E}را نسبت {\displaystyle h\_{m}} بهینه کنیم، از آنجا که{\displaystyle {\mbox{exp}}\left({-{\frac {\alpha \_{m}}{2}}}\right)\sum \_{i=1}^{N}w\_{i}^{(m)}} و {\displaystyle \left({\mbox{exp}}\left({\frac {\alpha \_{m}}{2}}\right)-{\mbox{exp}}\left({-{\frac {\alpha \_{m}}{2}}}\right)\right)} نسبت به {\displaystyle h\_{m}} ثابت هستند، فقط باید {\displaystyle \sum \_{i=1}^{N}w\_{i}^{(m)}I\left(h\_{m}(x\_{i})\neq y\_{i}\right)} را نسبت به {\displaystyle h\_{m}} کمینه کنیم؛ یعنی {\displaystyle h\_{m}={\underset {h\in {\mathcal {H}}}{\operatorname {argmin} }}\;\sum \_{i=1}^{N}w\_{i}^{(m)}I(h(x\_{i})\neq y\_{i})}

بعد از پیدا کردن {\displaystyle h\_{m}} باید {\displaystyle \alpha \_{m}} را پیدا کنیم اگر {\displaystyle {\frac {\sum \_{i=1}^{N}w\_{i}^{(m)}I(h(x\_{i})\neq y\_{i})}{\sum \_{i=1}^{N}w\_{i}^{(m)}}}} را {\displaystyle \epsilon \_{m}} بنامیم تابع هزینه ما تبدیل می‌شود به {\displaystyle \left(\left({\mbox{exp}}\left({\frac {\alpha \_{m}}{2}}\right)-{\mbox{exp}}\left({-{\frac {\alpha \_{m}}{2}}}\right)\right)\epsilon \_{m}+{\mbox{exp}}\left({-{\frac {\alpha \_{m}}{2}}}\right)\right)\sum \_{i=1}^{N}w\_{i}^{(m)}}که اگر از آن نسبت به {\displaystyle \alpha \_{m}} مشتق بگیریم و جواب را در نقطه صفر بدست بیاوریم به این جواب می‌رسیم: {\displaystyle \alpha \_{m}={\frac {1}{2}}{\textrm {ln}}{\frac {1-\epsilon \_{m}}{\epsilon \_{m}}}}.

حال که {\displaystyle \alpha \_{m}} و {\displaystyle h\_{m}} را پیدا کردیم باید ببینیم که {\displaystyle w\_{i}^{(m+1)}} به چه شکل نسبت به {\displaystyle w\_{i}^{(m)}} بروز می‌شود. {\displaystyle w\_{i}^{(m+1)}} همان {\displaystyle {\mbox{exp}}\left({-y\_{i}\times f\_{m}(x\_{i})}\right)} است یعنی

{\displaystyle {\begin{aligned}w\_{i}^{(m+1)}&={\mbox{exp}}\left({-y\_{i}\times f\_{m}(x\_{i})}\right)\\&={\mbox{exp}}\left({-y\_{i}\times \left(f\_{m-1}(x\_{i})+{\frac {1}{2}}\alpha \_{m}h\_{m}(x\_{i})\right)}\right)\\&={\mbox{exp}}\left({-y\_{i}f\_{m-1}(x\_{i})}\right){\mbox{exp}}\left({-{\frac {1}{2}}y\_{i}\alpha \_{m}h\_{m}(x\_{i})}\right)\\&=w\_{i}^{(m)}{\mbox{exp}}\left({-{\frac {1}{2}}y\_{i}\alpha \_{m}h\_{m}(x\_{i})}\right)\end{aligned}}}

پس ارتباط {\displaystyle w\_{i}^{(m+1)}} با {\displaystyle w\_{i}^{(m)}} به این شکل خواهد بود:

{\displaystyle w\_{i}^{(m+1)}=w\_{i}^{(m)}{\mbox{exp}}\left({-{\frac {1}{2}}y\_{i}\alpha \_{m}h\_{m}(x\_{i})}\right)}

از آنجا که {\displaystyle y\_{i}h\_{m}(x\_{i})=1-2I(h(x\_{i})\neq y\_{i})} به‌روز کردن {\displaystyle w\_{i}^{(m+1)}} به این شکل تغییر خواهد کرد:

{\displaystyle w\_{i}^{(m+1)}=w\_{i}^{(m)}{\mbox{exp}}\left({-{\frac {\alpha \_{m}}{2}}}\right){\mbox{exp}}\left({\alpha \_{m}I\left(h\_{m}(x\_{i})\neq y\_{i}\right)}\right)}

اگر تمام {\displaystyle w\_{i}^{(m+1)}}‌ها را در یک مقدار ثابتی ضرب کنیم تأثیری در جواب نهایی {\displaystyle \epsilon \_{m+1}} و {\displaystyle \alpha \_{m+1}} و {\displaystyle h\_{m+1}} نخواهد داشت. ازین رو همیشه می‌توان مقدار آن‌ها را نرمال‌سازی کرد. با نرمال‌سازی {\displaystyle w\_{i}^{(m+1)}} به معادله بازگشتی پایین می‌رسیم، در این معادله {\displaystyle Z\_{m}=\sum \_{i}w\_{i}^{(m)}} :

{\displaystyle w\_{i}^{(m+1)}={\frac {w\_{i}^{(m)}{\mbox{exp}}\left({\alpha \_{m}I\left(h\_{m}(x\_{i})\neq y\_{i}\right)}\right)}{Z\_{m}}}}

{\displaystyle w\_{i}^{(m+1)}} همان {\displaystyle D\_{m+1}(i)}است، و از آنجا که {\frac {1}{2}}در جواب {\displaystyle sign(f\_{m}(x))} تأثیری ندارد، می‌توان آن را حذف کرد. حال اگر m را همان T بگیریم به الگوریتم آدابوست خواهیم رسید.

جستارهای وابسته
---------------

* تقویت گرادیان
* ال پی بوست

منابع
-----

1. 1 2 3  Yoav Freund, Robert E. Schapire. "A Decision-Theoretic Generalization of on-Line Learning and an Application to Boosting", 1995
2. ↑
3. ↑  مهسا المعی نژاد. «روش‌های Bagging و Boosting به منظور رفع مشکل کلاس‌های نامتوازن». گروه داده کاوی ایران. بایگانی‌شده از اصلی در ۳۱ مارس ۲۰۱۴. دریافت‌شده در ۲۶ فوریه ۲۰۱۴.
4. ↑
5. ↑
6. ↑
7. ↑  T. Zhang, "Statistical behavior and consistency of classification methods based on convex risk minimization", Annals of Statistics 32 (1), pp. 56-85, 2004.
8. 1 2 3 4  Bishop, Christopher (2006). *Pattern Recognition and Machine Learning* (به انگلیسی). New York: Springer. pp. 658–661.

پیاده‌سازی‌ها
-------------

* 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 بایگانی‌شده در ۱۷ سپتامبر ۲۰۱۳ توسط Wayback Machine for Python implements AdaBoost.
* MPBoost++, a C++ implementation of the original AdaBoost.MH algorithm and of an improved variant, the MPBoost algorithm.
* NPatternRecognizer بایگانی‌شده در ۲۰ اوت ۲۰۱۳ توسط Wayback Machine, 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