Ансамбль методов в статистике и обучении машин использует несколько обучающих алгоритмов с целью получения лучшей эффективности прогнозирования, чем могли бы получить от каждого обучающего алгоритма по отдельности.
from sklearn.ensemble import VotingClassifier ensemble=VotingClassifier(estimators=[('Decision Tree', decisiontree), ('Random Forest', forest)], voting='soft', weights=[2,1]).fit(train_X,train_Y) print('The accuracy for DecisionTree and Random Forest is:',ensemble.score(test_X,test_Y))
Устредняем результаты нескольких моделей.
Бэггинг – технология классификации, где в отличие от бустинга все элементарные классификаторы обучаются и работают параллельно (независимо друг от друга). Идея заключается в том, что классификаторы не исправляют ошибки друг друга, а компенсируют их при голосовании. Базовые классификаторы должны быть независимыми, это могут быть классификаторы основанные на разных группах методов или же обученные на независимых наборах данных. Во втором случае можно использовать один и тот же метод. Бэггинг позволяет снизить процент ошибки классификации в случае, когда высока дисперсия ошибки базового метода.
Метод бэггинга (bagging, bootstrap aggregation) был предложен Л. Брейманом в 1996 году.
Пример с сайта XGBoost
Преимущества
Недостатки
Параметры бэггинга
Назовите очень известный алгоритм машинного обучения, построенный по принципе бэггинга.
Бустинг (англ. boosting — улучшение) — это процедура последовательного построения композиции алгоритмов машинного обучения, когда каждый следующий алгоритм стремится компенсировать недостатки композиции всех предыдущих алгоритмов.
Все началось с вопроса о том, можно ли из большого количества относительно слабых и простых моделей получить одну сильную. Оказалось, можно.
В течение последних 10 лет бустинг остаётся одним из наиболее популярных методов машинного обучения, наряду с нейронными сетями и машинами опорных векторов. Главную роль в популяризации бустинга сыграли ML соревнования, в особенности kaggle. Основные причины — простота, универсальность, гибкость (возможность построения различных модификаций), и, главное, высокая обобщающая способность.
Бустинг над решающими деревьями считается одним из наиболее эффективных методов с точки зрения качества классификации.
Основные виды бустинга:
Примерно так работает AdaBoost — первый популярный алгоритм бустинга. Подробнее о нем здесь
Параметры бустинга
Эта схема используется в самых популярных и эффективных библиотеках машинного обучения XGBoost, LightGBM, CatBoost.
Как работает XGBoost хорошо объясняется на сайте библиотеки, поэтому лучше поговорим об отличительных особенностях CatBoost. Названием библиотеки авторы акцентируют наше внимание на хороших результатах, которые библиотека показывает на категориальных данных. Это достигается несколькими способами:
Помимо этого в CatBoost есть ещё много приятных вещей, таких как втроенная кросс-валидация, сохранение моделей, визуализация процесса обучения, неплохая скорость работы с поддержкой GPU.
Стекинг был предложен Д. Волпертом в 1992 году.
Основная идея стекинга заключается в использовании базовых классификаторов для получения предсказаний (метапризнаков) и использовании их как признаков для некоторого ”обобщающего” алгоритма (метаалгоритма). Иными словами, основной идеей стекинга является преобразование исходного пространства признаков задачи в новое пространство, точками которого являются предсказания базовых алгоритмов. Предлагается сначала выбрать набор пар произвольных подмножеств из обучающей выборки, затем для каждой пары обучить базовые алгоритмы на первом подмножестве и предсказать ими целевую переменную для второго подмножества. Предсказанные значения и становятся объектами нового пространства.
partA
и partB
и partC
.partA
, прогнозируйте для partB
, partC
, test_data
, получите мета-признаки partB_meta
, partC_meta
и test_meta
соответственно.partB_meta
, проверяя её гиперпараметры на partC_meta
.partB_meta
, partC_meta
] и прогнозируйте для test_meta
.train data
на несколько частей (фолдов), затем последовательно перебирая фолды обучите N базовых алгоритмов на всех фолдах, кроме одного, а на оставшемся получите ответы базовых алгоритмов и трактуйте их как значения соответствующих признаков на этом фолде. После этого шага для каждого объекта в train_data
у нас будет N мета-признаков (out-of-fold predictions, OOF). Назовем их train_meta
.train data
и предскажите test data
. Назовём эти признаки test_meta
.train_meta
на две части: train_metaA
и train_metaB
. Обучите мета-модель на train_metaA
, провалидировав гиперпараметры на train_metaB
.train_meta
и сделайте предсказания на test_meta
.Cхема валидации честная, если набор, который мы используем для валидации метамоделей, происходит из того же распределения, что и набор мета признаков для теста. Другими словами, в честной схеме валидации набор данных, который мы используем для валидации метамоделей, никоим образом не использовался во время обучения моделей первого уровня.
Рализовывать схему стакинка вручную может быть слегка утомительно (хотя ничего мега-сложно там нет, вот пример реализации на чисто sklearn), поэтому можно воспользоваться библиотекой ML-Ensemble.
# в ML-Ensemble стакинг сводится к этому from mlens.ensemble import SuperLearner ensemble = SuperLearner() ensemble.add(estimators) ensemble.add_meta(meta_estimator) ensemble.fit(X, y).predict(X)
Комментарии