AdaBoost

**AdaBoost**（Adaptive Boosting、エイダブースト、アダブースト）は、Yoav Freund と Robert Schapire によって考案された機械学習アルゴリズムである。メタアルゴリズムであり、他の多くの学習アルゴリズムと組み合わせて利用することで、そのパフォーマンスを改善することができる。AdaBoost は前の分類機の間違いに応じて調整された次の分類機を作るという意味で適応的 (Adaptive) である。AdaBoost はノイズの多いデータや異常値に影響を受ける。しかし、いくつかの場面では、多くの学習アルゴリズムより過剰適合の影響を受けにくい。

AdaBoost は、それぞれの標本に対し、 t を、 t = 1 から t = T まで順に適用し、それぞれの分類器が正解したか否かを判断する。間違って分類された標本に対応する重み D_{t} は、より重くされる（あるいは、正しく分類された標本の場合は、重みを減らす）。これらの標本に対する重みから、次の t のループでは正しい分類器を早く探す事が出来る。

## 二分類のアルゴリズム
Given: (x_{1},y_{1}),\ldots,(x_{m},y_{m}) where x_{i} \in X,\, y_{i} \in Y = \{-1, +1\}

Initialize D_{1}(i) = \frac{1}{m}, i=1,\ldots,m.

For t = 1,\ldots,T:

* Find the classifier h_{t} : X \to \{-1,+1\} that minimizes the error with respect to the distribution D_{t}:
: h_{t} = \underset{h_{j} \in \mathcal{H}}{\operatorname{argmin}} \; \epsilon_{j}, where  \epsilon_{j} = \sum_{i=1}^{m} D_{t}(i)[y_i \ne h_{j}(x_{i})]
* if \epsilon_{t} > 0.5 then stop.
* Choose \alpha_{t} \in \mathbf{R}, typically \alpha_{t}=\frac{1}{2}\textrm{ln}\frac{1-\epsilon_{t}}{\epsilon_{t}} where \epsilon_{t} is the weighted error rate of classifier h_{t}.
* Update:
: D_{t+1}(i) = \frac{ D_t(i) \exp(-\alpha_t y_i h_t(x_i)) }{ Z_t }
where Z_{t} is a normalization factor (chosen so that D_{t+1} will be a probability distribution, i.e. sum one over all x).

Output the final classifier:

: H(x) = \textrm{sign}\left( \sum_{t=1}^{T} \alpha_{t}h_{t}(x)\right)

The equation to update the distribution D_{t} is constructed so that:

: - \alpha_{t} y_{i} h_{t}(x_{i}) \begin{cases} 0, & y(i) \ne h_{t}(x_{i}) \end{cases}

Thus, after selecting an optimal classifier h_{t} \, for the distribution D_{t} \,, the examples x_{i} \, that the classifier h_{t} \, identified correctly are weighted less and those that it identified incorrectly are weighted more.  Therefore, when the algorithm is testing the classifiers on the distribution D_{t+1} \,, it will select a classifier that better identifies those examples that the previous classifer missed.

## ブースティングの統計的理解
ブースティングは凸集合の関数上に関する凸損失関数の最小化とみなすことができる。特に、損失関数を最小化するために指数関数の損失関数: 

:\sum_i e^{-y_i f(x_i)}

および関数に対して探索を行う: 

:f = \sum_t \alpha_t h_t

を用いる。

## 関連項目
* バギング
* 
* 勾配ブースティング
* LightGBM

## 脚注

## 外部リンク
*icsiboost, an open source implementation of Boostexter
*NPatternRecognizer , a fast machine learning algorithm library written in C#. It contains support vector machine, neural networks, bayes, boost, k-nearest neighbor, decision tree, ..., etc.

*Adaboost in C++, an implementation of Adaboost in C++ and boost by Antonio Gulli
* Easy readable Matlab Implementation of Classic AdaBoost
*Boosting.org, a site on boosting and related ensemble learning methods
*JBoost, a site offering a classification and visualization package, implementing AdaBoost among other boosting algorithms. 
*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.
*A Matlab Implementation of AdaBoost

*Additive logistic regression: a statistical view of boosting by Jerome Friedman, Trevor Hastie, Robert Tibshirani. Paper introducing probabilistic theory for AdaBoost, and introducing GentleBoost
*OpenCV implementation of several boosting variants 
*MATLAB AdaBoost toolbox. Includes Real AdaBoost, Gentle AdaBoost and Modest AdaBoost implementations. 
*AdaBoost and the Super Bowl of Classifiers - A Tutorial on AdaBoost. 
*Rapid Object Detection using a Boosted Cascade of Simple Features