Изменения

Перейти к: навигация, поиск

Бустинг, AdaBoost

1164 байта добавлено, 19:08, 21 января 2019
AdaBoost
\sum\limits_{i=1}^{m} D_t(i) [y_i\neq h_j(x_i)]</tex>
2. Если величина <tex>\epsilon_t \geqslant 0.5</tex>, то останавливаемся.
3. Выбираем <tex>\alpha_t \in \mathbf{R}</tex>, обычно <tex>\alpha_t = \frac{1}{2}\mathcal{ln}\frac{1-\epsilon_t}{\epsilon_t}</tex>, где <tex>\epsilon_t</tex> взвешенная ошибка классификатора
<tex>h_t</tex>
4. Обновляем: <tex>D_{t+1}(i) = \frac{D_t(i)\exp^{-\alpha_t y_i h_t(x_i)}}{Z_t}</tex>, где <tex>Z_t</tex> является нормализующим параметром (выбранным так, чтобы <tex>D_{t+1}</tex> являлось распределением вероятностей, то есть <tex>\sum\limits_{i-1}^{m} D_{t+1}(i) = 1</tex>).
Таким образом, после выбора оптимального классификатора <tex>h_t</tex> для распределения <tex>D_t</tex>, объекты <tex>x_i</tex>, которые классификатор <tex>h_t</tex> идентифицирует корректно, имеют веса меньшие, чем те, которые идентифицируются некорректно. Следовательно, когда алгоритм тестирует классификаторы на распределении <tex>D_{t+1}</tex>, он будет выбирать классификатор, который лучше идентифицирует объекты неверно распознаваемые предыдущим классификатором.
===Построение линейной комбинации классификаторов===
Пусть <tex>N(b,U^{l})</tex> {{---}} суммарный вес ошибочных классификаций, где $b$ {{---}} алгоритм классификации, <tex>U^l = (u_1,...,u_l)</tex> {{---}} нормированный вектор весов объектов обучающей выборки.
Дано: <tex>X^l, Y^l</tex> {{---}} обучающая выборка, $T$ {{---}} максимальное число базовых алгоритмов
1. инициализация весов объектов: <tex>w_i = 1/l,\ i = 1,...,l;</tex>
2. '''для всех''' <tex>t = 1,...,T</tex>, '''пока''' не выполнен критерий останова:
1. <tex>b_t = \arg \min_{b} N(b; W^l)</tex>;
2. <tex>\alpha_t = \frac{1}{2} \ln\frac{1 - N(b_t;W^l)}{N(b_t;W^l)}</tex>;
3. пересчет весов объектов: <tex>w_i = w_i\exp{-\alpha_t y_i b_t(x_i)},\ i = 1,...,l</tex>;
4. нормировка весов объектов: <tex>w_0 = \sum\limits_{j=1}^{l} w_j; w_i = \frac{w_i}{w_0},\ i = 1,...,l</tex>;
===Пример кода на python для scikit-learn===
Классификатор sklearn.ensemble.'''AdaBoostClassifier''' имеет 5 параметров: '''base_estimator''', '''n_estimators''', '''learning_rate''', '''algorithm''', '''random_state'''.
64
правки

Навигация