Изменения

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

Виды ансамблей

3533 байта добавлено, 00:22, 4 апреля 2019
м
Источники информации
Ансамбль алгоритмов (методов) — метод, который использует несколько обучающих алгоритмов с целью получения лучшей эффективности прогнозирования, чем можно было бы получить от каждого обучающего алгоритма по отдельности.
Рассмотрим задачу классификации на <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>X</tex> размера <tex>N</tex>. Количество классификаторов <tex>M</tex>.
Для алгоритма нам понадобится Алгоритм использует метод бутстрэпа (англ. ''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>. Теперь мы имеем достаточно большое число выборок и можем оценивать различные статистики исходного распределения.
Алгоритм классификации в технологии Шаги алгоритма бэггинг на подпространствах:
<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>h(x, a)</tex> — базовый классификатор, где <tex>a</tex> — вектор параметров.
Алгоритмы бустинга:
<ul>
<li>[[Бустинг, AdaBoost|AdaBoost]] — адаптивный алгоритм бустинга, усиливающий классификаторы, объединяя их в «комитет». Чувствителен к шуму.
<li>BrownBoost — алгоритм бустинга, эффективный на зашумленных наборах данных
<li>GradientBoost — алгоритм бустинга, использующий идеи линейной регресии
<li>LogitBoost — алгоритм бустинга, использующий идеи логистической регресси
</ul>
 
== Реализации и применения бустинга ==
 
Реализации бустинга:
 
* [[XGBoost|XGBoost]] — одна из самых популярных и эффективных реализаций алгоритма градиентного бустинга на деревьях на 2019-й год.
* [[CatBoost|CatBoost]] — библиотека для метода машинного обучения, основанная на градиентном бустинге (англ. gradient boosting).
* LightGBM — открытая программная библиотека разработанная компанией Яндекс
 
 
Применение бустинга:
* поисковые системы
* ранжирования ленты рекомендаций
* прогноз погоды
* оптимизации расхода сырья
* предсказания дефектов при производстве.
* исследованиях на Большом адронном коллайдере (БАК) для объединения информации с различных частей детектора 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
* https[[Категория://www.cs.toronto.edu/~delve/data/boston/bostonDetail.htmlМашинное обучение]][[Категория: Ансамбли]]
68
правок

Навигация