1632
правки
Изменения
м
Для алгоритма нам понадобится Алгоритм использует метод бутстрэпа (англ. ''bootstrap''):
Равномерно возьмем из выборки <tex>Из всего множества объектов равновероятно выберем N</tex> объектов с возвращением. Это означаетзначит, что после выбора каждого из объектов мы будем <tex>N</tex> раз равновероятно выбирать произвольный объект выборки, причем каждый раз мы выбираем из всех исходных <tex>N</tex> объектоввозращать его в множество для выбора. Отметим, что из-за возвращения среди них окажутся повторынекоторые объекты могут повторяться в выбранном множестве. <br> Обозначим новую выборку через <tex>X_1</tex>. Повторяя процедуру <tex>M</tex> раз, сгенерируем <tex>M</tex> подвыборок <tex>X_1 ... X_M</tex>. Теперь мы имеем достаточно большое число выборок и можем оценивать различные статистики исходного распределения.
Алгоритм классификации в технологии Шаги алгоритма бэггинг на подпространствах:
=== AdaBoost ===Пусть <tex>h(x, a)</tex> — базовый классификатор, где <tex>a</tex> — вектор параметров.
Алгоритм [[БустингЗадача состоит в том, AdaBoost|AdaBoost]] чтоб найти такой алгоритм <tex>H_T(x) = \sum_{t=1}^T b_t h(сокр. от adaptive boostingx, a) ,</tex> где <tex>b_t \in \mathbb{R}</tex> — алгоритм машинного обучениякоэффиценты, такие, предложенный Йоавом Фройндом чтобы минимизировать эмпирический риск <tex>Q = \sum_i L(Yoav Freund) и Робертом Шапиром H_T(Robert Schapirex_i). Является мета-алгоритмом, в процессе обучения строит композицию из базовых алгоритмов обучения для улучшения их эффективности. AdaBoost является алгоритмом адаптивного бустинга в том смыслеy_i) \rightarrow min</tex>, что каждый следующий классификатор строится по объектамгде <tex>L(H_T(x_i), которые плохо классифицируются предыдущими классификаторамиy_i)</tex> — функция потерь.
* https[[Категория://www.cs.toronto.edu/~delve/data/boston/bostonDetail.htmlМашинное обучение]][[Категория: Ансамбли]]
rollbackEdits.php mass rollback
Ансамбль алгоритмов (методов) — метод, который использует несколько обучающих алгоритмов с целью получения лучшей эффективности прогнозирования, чем можно было бы получить от каждого обучающего алгоритма по отдельности.
Рассмотрим задачу классификации на <tex> K </tex> классов: <tex>Y = \{1, 2, ..., K\}</tex> . <br>Пусть имеется <tex> M классификатор </tex> классификаторов ("экспертов"): <tex> f_1, f_2, ..., f_M </tex> . <br> <tex> f_m : X \leftarrow rightarrow Y, f_m \in F, m = (1 ... M) </tex> . <br>
Тогда давайте посмотрим новый классификатор на основе данных:
Простое голосование: <tex> f(x) = \max \limits_{k = 1 .. K} \sum \limits_{i = 1}^M I(f_i(x) = k) </tex> . <br>Взвешенное голосование: <tex> f(x) = \max \limits_{k = 1 .. K} \sum \limits_{i = 1}^M \alpha_i I(f_i(x) = k), \sum \limits_i \alpha_i = 1, \alpha_i > 0</tex>. <br>Где <tex> \begin{equation*}I(x) = \begin{cases} 1 &\text{x = true}\\ 0 &\text{x = false} \end{cases}\end{equation*}</tex>
== Теорема Кондорсе о присяжных ==
{{Теорема
|statement=
Если каждый член жюри присяжных имеет независимое мнение, и если вероятность правильного решения члена жюри больше 0.5, то тогда вероятность правильного решения присяжных в целом возрастает с увеличением количества членов жюри, и стремиться стремится к единице. <br>
Если же вероятность быть правым у каждого из членов жюри меньше 0.5, то вероятность принятия правильного решения присяжными в целом монотонно уменьшается и стремится к нулю с увеличением количества присяжных.
}}
Пусть <tex>M</tex> — количество присяжныйприсяжных, <tex>p</tex> — вероятность правильного решения одного эксперта, <tex>R</tex> — вероятность правильного решения всего жюри,
<tex>m</tex> — минимальное большинство членов жюри <tex> = \lfloor \frac N 2 \rfloor + 1 </tex>.
Тогда <tex> R = \sum \limits_{i = m}^M C_M^i p ^ i (1 - p) ^ {M - i} </tex>
[[Файл:Виды_Ансамблей_2.png|none|400px|thumb|Вероятность правильного решения всего жюри (R) в зависимости от вероятности правильного решения одного жюри эксперта (p) при разном количестве экспертов(M)]]
== Бэггинг ==
Пусть имеется выборка <tex>X</tex> размера <tex>N</tex>. Количество классификаторов <tex>M</tex>.
<ul>
<li> Генерируется с помощью бутстрэпа M выборок размера N для каждого классификатора.
<li> Консенсус: если все элементарные классификаторы присвоили объекту одну и ту же метку, то относим объект к выбранному классу.
<li> Простое большинство: консенсус достижим очень редко, поэтому чаще всего используют метод простого большинства. Здесь объекту присваивается метка того класса, который определило для него большинство элементарных классификаторов.
<li> Взвешивание классификаторов: если классификаторов четное количество, то голосов может получиться поровну, еще возможно, что для эксперты экспертов одна из групп параметров важна в большей степени, тогда прибегают к взвешиванию классификаторов. То есть при голосовании голос классификатора умножается на его вес.
</ul>
[[Файл:Виды_ансамблей_БэггингВиды_ансамблей_Бэггинг_рус.png|none|800px]]
Рассмотрим задачу регрессии с базовыми алгоритмами <tex>b_1, b_2, ..., b_m</tex>. Предположим, что существует истинная функция ответа для всех объектов y(x), а также задано распределение p(x) на объектах. В этом случае мы можем записать ошибку каждой функции регрессии:
<tex> E_x\epsilon_i(x) = 0, E_x\epsilon_i(x)\epsilon_j(x) = 0, i ≠ j </tex>
Построим теперь новую функцию регрессии, которая будет усреднять усредняющую ответы уже построенных нами функций:
<tex> a(x) = \frac 1 n \sum \limits_{i = 1}^n b_i(x) </tex>
== Бустинг ==
[[Бустинг , AdaBoost|'''Бустинг''']] (англ. boosting — улучшение) — это процедура последовательного построения композиции алгоритмов машинного обучения, когда каждый следующий алгоритм стремится компенсировать недостатки композиции всех предыдущих алгоритмов. Бустинг представляет собой жадный алгоритм построения композиции алгоритмов.
Очевидно, что сложно найти сразу <tex>\{(a_t, b_t)\}_{t=1}^T.</tex> Основная идея в том, чтоб найти решение пошагово <tex>H_t(x) = H_{t — 1}(x) + b_t h(x, a_t)</tex>. Таким образом мы сможем постепенно оценивать изменение эмпирического риска <tex>Q^{(t)} = \sum_{i = 1}^l L(H_t(x_i), y_i) </tex>. Алгоритмы бустинга: <ul><li>[[Бустинг, AdaBoost вызывает слабый классификатор |AdaBoost]] — адаптивный алгоритм бустинга, усиливающий классификаторы, объединяя их в цикле«комитет». Чувствителен к шуму. После каждого вызова обновляется распределение весов<li>BrownBoost — алгоритм бустинга, эффективный на зашумленных наборах данных<li>GradientBoost — алгоритм бустинга, которые отвечают важности каждого использующий идеи линейной регресии<li>LogitBoost — алгоритм бустинга, использующий идеи логистической регресси</ul> == Реализации и применения бустинга == Реализации бустинга: * [[XGBoost|XGBoost]] — одна из объектов обучающего множества самых популярных и эффективных реализаций алгоритма градиентного бустинга на деревьях на 2019-й год. * [[CatBoost|CatBoost]] — открытая программная библиотека, разработанная компанией Яндекс.* LightGBM — библиотека для классификацииметода машинного обучения, основанная на градиентном бустинге (англ. gradient boosting). На каждой итерации Применение бустинга:* поисковые системы* ранжирования ленты рекомендаций* прогноз погоды* оптимизации расхода сырья* предсказания дефектов при производстве.* исследованиях на Большом адронном коллайдере (БАК) для объединения информации с различных частей детектора LHCb в максимально точное, агрегированное знание о частице. == Различия между алгоритмами == <ul><li> Оба алгоритма используют N базовых классификаторов <ul> <li> Бустинг использует последовательное обучение </li> <li> Бэггинг использует параллельное обучение </li> </ul></li><li> Оба генерируют несколько наборов данных для обучения путем случайной выборки <ul> <li> Бустинг определяет вес данных, чтоб утяжелить тяжелые случаи </li> <li> Бэггинг имеет невзвешенные данные </li> </ul></li><li> Оба принимают окончательное решение, усредняя N классификаторов <ul> <li> В бустинге определяются веса каждого неверно классифицированного объекта возрастаютдля них </li> <li> В бэггинге они равнозначны </li> </ul></li><li> Оба уменьшают дисперсию и обеспечивают более высокую стабильность <ul> <li> Бэггинг может решить проблему переобучения </li> <li> Бустинг пытается уменьшить смещение, таким образом новый классификатор «фокусирует своё внимание» на этих объектах.но может увеличить проблему переобучения </li> </ul></li> </ul>
== Примеры кода ==
from pydataset import data
<font color="green">#Считаем данные The Boston Housing Dataset<ref>[http://www.cs.toronto.edu/~delve/data/boston/bostonDetail.html The Boston Housing Dataset]</ref> </font>
df = data('Housing')
<font color="green">#Проверим данные</font>
df.head().values
array([[42000.0, 5850, 3, 1, 2, 'yes', 'no', 'yes', 'no', 'no', 1, 'no'],
[49500.0, 3060, 3, 1, 1, 'yes', 'no', 'no', 'no', 'no', 0, 'no'], ...
<font color="green"># Создадим словарь для слов 'no', 'yes'</font>
d = dict(zip(['no', 'yes'], range(0,2)))
for i in zip(df.dtypes.index, df.dtypes):
df[‘price’] = pd.qcut(df[‘price’], 3, labels=[‘0’, ‘1’, ‘2’]).cat.codes
<font color="green"># Разделим множество на два</font>
y = df['price']
X = df.drop('price', 1)
'''Бэггинг'''
<font color="green"># Импорты классификаторов</font>
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import BaggingClassifier, ExtraTreesClassifier, RandomForestClassifier
seed = 1075
np.random.seed(seed)
<font color="green"># Инициализуруем классификаторы</font>
rf = RandomForestClassifier()
et = ExtraTreesClassifier()
bagging_scores.mean(), bagging_scores.std())
<font color="green">#Результат</font>
Mean of: 0.632, std: (+/-) 0.081 [RandomForestClassifier]
Mean of: 0.639, std: (+/-) 0.069 [Bagging RandomForestClassifier]
print("Mean: {0:.3f}, std: (+/-) {1:.3f} [{2}]".format(scores.mean(), scores.std(), label))
<font color="green"># Результат</font>
Mean: 0.641, std: (+/-) 0.082 [Ada Boost]
Mean: 0.654, std: (+/-) 0.113 [Grad Boost]
Mean: 0.663, std: (+/-) 0.101 [XG Boost]
Mean: 0.667, std: (+/-) 0.105 [Ensemble]
== См. также ==
* [[:Бустинг, AdaBoost|Бустинг, AdaBoost]]
* [[:XGBoost|XGBoost]]
* [[:CatBoost|CatBoost]]
== Примечания ==
<references/>
== Источники информации ==
* https://github.com/Microsoft/LightGBM
* https://github.com/dmlc/xgboost
* https://ru.wikipedia.org/wiki/CatBoost
* https://quantdare.com/what-is-the-difference-between-bagging-and-boosting/
* https://medium.com/@rrfd/boosting-bagging-and-stacking-ensemble-methods-with-sklearn-and-mlens-a455c0c982de