Изменения

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

XGBoost

105 байт добавлено, 13:59, 28 сентября 2021
Математика за алгоритмом
==История==
XGBoost изначально стартовал как исследовательский проект Тяньцзи Чена (Tianqi Chen) как часть сообщества распределенного глубинного машинного обучения. Первоначально он начинался как терминальное приложение, которое можно было настроить с помощью файла конфигурации libsvm. После победы в Higgs Machine Learning Challenge, он стал хорошо известен в соревновательный кругах по машинному обеспечению. Вскоре после этого были созданы пакеты для Python и R, и теперь у него есть пакеты для многих других языков, таких как Julia, Scala, Java и т. д. Это принесло библиотеке больше разработчиков и сделало ее популярной среди сообщества Kaggle<ref>[https://www.kaggle.com/ Kaggle]</ref>, где она использовалось для большого количества соревнований. Программное обеспечение разработано по методологии SCRUM.
Она вскоре стала использоваться с несколькими другими пакетами, что облегчает ее использование в соответствующих сообществах. Теперь у нее есть интеграция с scikit-learn для пользователей Python, а также с пакетом caret для пользователей R. Она также может быть интегрирована в рамах потока данных, таких как Apache Spark<ref>[https://spark.apache.org/ Apache Spark]</ref>, Apache Hadoop<ref>[https://hadoop.apache.org/ Apache Hadoop]</ref>, и Apache Flink<ref>[https://flink.apache.org/ Apache Flink]</ref> с использованием абстрактных Rabit<ref>[https://github.com/dmlc/rabit Rabit]</ref> и XGBoost4J<ref>[https://xgboost.readthedocs.io/en/latest/jvm/ XGBoost JVM]</ref>. Принцип работы XGBoost также был опубликован Тяньцзи Ченом (Tianqi Chen) и Карлосом Гастрин (Carlos Guestrin).
В основе '''XGBoost''' лежит алгоритм [[Бустинг, AdaBoost|градиентного бустинга]] [[Дерево решений и случайный лес|деревьев решений]].
Градиентный бустинг — это техника машинного обучения для задач классификации и регрессии, которая строит модель предсказания в форме ансамбля слабых предсказывающих моделей, обычно деревьев решений.
Обучение ансамбля проводится последовательно в отличие, например от [[Виды_ансамблей | бэггинга]]. На каждой итерации вычисляются отклонения предсказаний уже обученного ансамбля на обучающей выборке. Следующая модель, которая будет добавлена в ансамбль будет предсказывать эти отклонения. Таким образом, добавив предсказания нового дерева к предсказаниям обученного ансамбля мы можем уменьшить среднее отклонение модели, котрое которое является таргетом оптимизационной задачи. Новые деревья добавляются в ансамбль до тех пор,
пока ошибка уменьшается, либо пока не выполняется одно из правил "ранней остановки".
Дальше с помощью разложения Тейлора до второго члена можем приблизить оптимизируемую функцию <tex>\mathcal{L}^{(t)}</tex> следующим выражением:
<tex>\mathcal{L}^{(t)} = \sum_{i=1}^n l(y_i,\hat{y_i}^{(t-1)}) + g_i f_t(x_i) + 0.5 h_i f_t^2(x_i)) + \Omega(f_t)</tex>, где
<tex>g_i = \frac {\partial {l(y_i,\hat{y_i}^{t-1})}}{\partial{\hat{y_i}^{t-1}}}</tex>, <tex>h_i = \frac {\partial^2 {l(y_i,\hat{y_i}^{t-1})}}{\partial^2{\hat{y_i}^{t-1}}}</tex>
Поскольку мы хотим минимизировать ошибку модели на обучающей выборкивыборке, нам нужно найти минимум <tex>\mathcal{L}^{(t)}</tex> для каждого ''t''.
Минимум этого выражения относительно <tex>f_t(x_i)</tex> находится в точке <tex>f_t(x_i) = \frac{-g_i}{h_i}</tex>.
==Основные параметры==
* ''n_estimators'' {{---}} число деревьев.
* ''eta'' {{---}} размер шага. Пердотвращает Предотвращает переобучение.
* ''gamma'' {{---}} минимальное изменение значения ''loss'' функции для разделения листа на поддеревья.
* ''max_depth'' {{---}} максимальная глубина дерева.
Анонимный участник

Навигация