Вы подписаны на Машинное обучение доступно
Отлично! завершите оплату для полного доступа к Машинное обучение доступно
Снова приветствуем Вас! Вы успешно авторизовались
Успех! Аккаунт активирован, и Вы имеете полный доступ к контенту.
Бэггинг (Bagging)

Бэггинг (Bagging)

in

Бэггинг (Бутстрэп-агрегирование) – это алгоритм, предназначенный для улучшения стабильности и точности алгоритмов Машинного обучения (ML), используемых для задач Классификации (Classification) и Регрессии (Regression).

Прежде чем мы перейдем к основному понятию статьи, давайте кратко рассмотрим важный базовый прием Науки о данных (Data Science) – Бутстрап (Bootstrap).

Бутстрап – это мощный статистический метод оценки характеристик Признака (Feature) на основе Выборки (Sample). Мы поймем понятие, определив, является ли вычисленное Среднее арифметическое (Mean) или Стандартное отклонение (Standard Deviation) показательным с помощью этого метода.

Предположим, у нас есть выборка из массива данных на 100 значений, и мы хотим оценить, показательно ли среднее значение ее относительно Популяции (Population).

Мы можем вычислить среднее непосредственно классическим способом, разделив сумму значений на их количество:

$$μ = \frac{Σ_{i=1}^n a_i}{n}, где$$
$$μ\space{–}\space{среднее,}$$
$$Σ_{i=1}^n a_i\space{–}\space{сумма}\space{всех}\space{элементов}\space{выборки},$$
$$n\space{–}\space{количество}\space{наблюдений}$$

Мы знаем, что наша выборка мала и среднее значение непоказательно. Улучшим оценку нашего среднего, используя бутстрэп:

  • Создадим множество (например, 1000) случайных выборок нашего набора данных (мы можем выбрать одно и то же значение несколько раз)
  • Рассчитаем среднее значение каждой выборки
  • Вычислим среднее значение всех собранных нами средних значений и используем его в качестве наиболее показательного среднего.

Например, мы сформировали три выборки из популяции и получили средние значения 2.3, 4.5 и 3.3. Взяв среднее от этой троицы, получим наиболее правдивое значение 3,367. Этот прием можно использовать для оценки других величин, таких как стандартное отклонение, и даже величин, используемых в алгоритмах Машинного обучения.

Бутстрэп-агрегирование или бэггинг

Бэггинг – это простой и очень мощный ансамблевый метод, который объединяет прогнозы из нескольких методов Машинного обучения вместе, чтобы предсказывать более точно, чем любая отдельная модель.

Бутстрэп-агрегирование – это процедура, которая используется для сокращения чрезмерной дисперсии (Variance) алгоритмов – Деревьев решений (Decision Tree), таких как Алгоритм классификации и регрессии (CART).

Деревья решений чувствительны к конкретным данным, на которых обучаются. Если Тренировочные данные (Train Data) изменены (например, обучение производится на подмножестве), результирующее дерево может быть совершенно другим, и прогнозы могут быть совершенно разными для каждого такого подмножества.

Предположим, у нас есть набор из 1000 экземпляров, и мы используем алгоритм CART. Тогда бэггинг будет работать следующим образом:

  • Создадим множество (например, 100) случайных выборок нашего набора данных с возможностью переиспользования Наблюдений (Observation)
  • Обучим модель CART на каждом из сэмплов
  • Рассчитаем среднее значение для каждой модели.

Например, если бы у нас было 5 деревьев решений, которые использовали следующую выборку: синий, синий, красный, синий и красный, мы бы предсказали наиболее распространенный класс “синий”.

При бэггинге с деревьями решений мы меньше беспокоимся о том, чтобы отдельные деревья достигали Переобучения (Overfitting) обучающими данными. По этой причине и для повышения эффективности отдельные деревья решений выращиваются глубоко (например, несколько обучающих выборок в каждом листовом узле дерева), и деревья не обрезаются. Эти деревья будут иметь как высокую дисперсию, так и низкую погрешность. Это важные характеристики моделей при объединении прогнозов.

Единственные параметры при объединении деревьев решений – это количество выборок и, следовательно, количество включаемых деревьев. До тех пор, пока точность не прекратит улучшаться, можно тренировать новые и новые деревья. Большое число моделей потребует времени, но переобучения не будет.

Как и сами деревья решений, Bagging можно использовать для задач классификации и регрессии.

Случайный лес

Случайные леса (Random Forest) являются апгрейдом деревьев решений с бэггингом.

Проблема с деревьями решений, такими как CART, заключается в жадности: они выбирают, какую переменную использовать, используя “жадный” алгоритм, сводящий к минимуму ошибки. Таким образом, даже при использовании бэггинга деревья решений могут иметь много структурных сходств и, в свою очередь, иметь высокую корреляцию в своих прогнозах.

Объединение прогнозов из нескольких моделей в ансамбли способствует взрывному росту эффективности, если прогнозы из подмоделей некоррелированы или в лучшем случае слабо коррелированы.

Случайный лес изменяет алгоритм способа обучения поддеревьев, так что результирующие прогнозы из всех их имеют меньшую корреляцию.

В CART при выборе точки разделения алгоритму разрешено просматривать все переменные и их значения, чтобы выбрать наиболее оптимальную точку разделения. Алгоритм случайного леса изменяет эту процедуру таким образом, чтобы ограничиваться случайной выборкой функций, по которым выполняется поиск.

Количество признаков, которые могут быть найдены в каждой точке разделения, должно быть указано в качестве параметра алгоритма. Вы можете попробовать разные значения и настроить их с помощью Кросс-валидации (Cross Validation):

  • Для классификации хорошее значение по умолчанию равно sqrt (p)
  • Для регрессии хорошее значение по умолчанию равно p / 3, где

m – количество случайно выбранных объектов, которые можно искать в точке разделения,

p – количество входных переменных.

Например, если в наборе данных было 25 входных переменных для задачи классификации, то:

m = sqrt (25) = 5

Расчетная производительность

Когда выборка сформирована, всегда найдутся наблюдения, не попавшие в нее. Эти записи называются Out-Of-Bag или OOB.

Производительность каждой модели на ее OOB-наблюдениях при усреднении может обеспечить некую точность бэггинг-моделей. Эту оценку производительности часто называют оценкой производительности OOB.

Эти показатели производительности представляют собой надежную оценку ошибки тестирования и хорошо коррелируют с оценками перекрестной проверки.

Бэггинг и Scikit-learn

Бэггинг легко продемонстрировать с помощью соответствующей функции Scikit-learn. Для начала импортируем необходимые библиотеки:

import sklearn
from sklearn.svm import SVC
from sklearn.ensemble import BaggingClassifier
from sklearn.datasets import make_classification

Сгенерируем набор данных из 100 наблюдений и 4 признаков случайным образом:

X, y = make_classification(n_samples = 100, n_features = 4,
n_informative = 2, n_redundant = 0,
random_state = 0, shuffle = False)

Применим Метод опорных векторов (SVM) в качестве метода оценки бэггинга:

clf = BaggingClassifier(base_estimator = SVC(),
n_estimators = 10, random_state = 0).fit(X, y)

Предскажем класс для наблюдения:

clf.predict([[0, 0, 0, 0]])

Для записи, где каждый из четырех признаков равен нулю, класс будет равен единице:

array([1])

Ноутбук, не требующий дополнительной настройки на момент написания статьи, можно скачать здесь.

Фото: @wilstewart3

Автор оригинальной статьи: Jason Brownlee