Изменения

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

XGBoost

4783 байта добавлено, 19:40, 4 сентября 2022
м
rollbackEdits.php mass rollback
==История==
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Описание алгоритма=='''Особенности модели''' Реализация модели поддерживает особенности реализации scikit[[File:golf-learn и R с новыми дополнениями, такими как регуляризацияMSE. Поддерживаются три основные формы повышения градиентаpng|700px|thumb|[https* Алгоритм Gradient Boosting также называется градиентной машиной повышения, включая скорость обучения//explained.* Stochastic Gradient Boosting с субai/gradient-boosting/images/golf-выборкой в ​​строке, столбце и столбце на каждый уровень разделенияMSE.png Иллюстрация бустинга]]]* Регулярное усиление градиента с регуляцией L1 и L2. В основе '''Системные функцииXGBoost'''лежит алгоритм [[Бустинг, AdaBoost|градиентного бустинга]] [[Дерево решений и случайный лес|деревьев решений]]. Библиотека предоставляет систему Градиентный бустинг — это техника машинного обучения для использования задач классификации и регрессии, которая строит модель предсказания в различных вычислительных средахформе ансамбля слабых предсказывающих моделей, не обычно деревьев решений.Обучение ансамбля проводится последовательно в последнюю очередь: * Параллелизация построения дерева с использованием всех ваших ядер процессора во время обученияотличие, например от [[Виды_ансамблей | бэггинга]].* Распределенные вычисления для обучения очень крупных моделей с использованием кластера машинНа каждой итерации вычисляются отклонения предсказаний уже обученного ансамбля на обучающей выборке.* Внекорпоративные вычисления для очень больших наборов данныхСледующая модель, которые не вписываются которая будет добавлена в памятьансамбль будет предсказывать эти отклонения. Таким образом, добавив предсказания нового дерева к предсказаниям обученного ансамбля мы можем уменьшить среднее отклонение модели, которое является таргетом оптимизационной задачи.Новые деревья добавляются в ансамбль до тех пор,* Кэш Оптимизация структуры данных и алгоритма для наилучшего использования аппаратного обеспеченияпока ошибка уменьшается, либо пока не выполняется одно из правил "ранней остановки".
'''Особенности алгоритма'''Рассмотрим иллюстрацию бустинга. На ней рассматривается поведение модели на одной точке абстрактной задачи линейной регрессии. Предположим, что первая модель ансамбля <tex>F</tex> всегда выдает Реализация алгоритма была разработана для эффективности вычислительных ресурсов времени и памятивыборочное среднее предсказываемой величины <tex>f_0</tex>. Цель проекта заключалась в томТакое предсказание довольно грубое, чтобы наилучшим образом использовать имеющиеся ресурсы для обучения моделипоэтому среднеквадратичное отклонение на выбранной нами точке будет довольно большим. Некоторые ключевые функции реализации алгоритма включают:Мы попробуем это исправить обучив модель * Редкая реализация Aware с автоматической обработкой отсутствующих значений данных<tex>\Delta_1</tex>, которая будет "корректировать" предсказание предыдущего ансамбля <tex>F_0</tex>.* Блочная структура для поддержки распараллеливания конструкции дереваТаким образом мы получим ансамбль <tex>F_1</tex>, предсказание которого будет суммироваться из предсказаний моделей <tex>f_0</tex> и <tex>\Delta_1</tex>.* Продолжение обученияПродолжая такую последовательность мы приходим к ансамблю <tex>F_4</tex> предсказание которого суммируется из предсказаний <tex>f_0</tex>, <tex>\Delta_1</tex>, <tex>\Delta_2</tex>, <tex>\Delta_3</tex>, чтобы вы могли еще больше повысить уже установленную модель для новых данных<tex>\Delta_4</tex> и предсказывает в точности значение заданного таргета. ==Идея алгоритма=Математика за алгоритмом===
<tex>\mathcal{L}^{(t)} = \sum_{i=1}^n l(y_i,\hat{y_i}^{(t-1)}+f_t(x_i))+\Omega(f_t)</tex> {{---}} функция для оптимизации градиентного бустинга, где:
<tex>w</tex> {{---}} значения в листьях, а <tex>\gamma</tex> и <tex>\lambda</tex> {{---}} параметры регуляризации.
Дальше с помощью разложения Тейлора до второго члена можем приблизить это оптимизируемую функцию <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>.
Каждое отдельное дерево ансамбля <tex>f_t(x_i)</tex> обучается стандартным алгоритмом. Для более полного описания см. [[Дерево решений и случайный лес|Дерево решений и случайный лес]].
 
==Возможности XGBoost==
'''Особенности модели'''
 
XGBoost поддерживает все возможности таких библиотек как scikit-learn с возможностью добавлять регуляризацию. Поддержаны три главные формы градиетного бустинга:
 
* Стандартный [[Бустинг,_AdaBoost|градиентный бустинг]] с возможностью изменения скорости обучения(''learning rate'').
* Стохастический градиентный бустинг<ref>[https://statweb.stanford.edu/~jhf/ftp/stobst.pdf Stochastic Gradient Boosting]</ref> с возможностью семплирования по строкам и колонкам датасета.
* Регуляризованный градиентный бустинг<ref>[https://arxiv.org/pdf/1806.09762.pdf Regularized Gradient Boosting]</ref> с L1 и L2 регуляризацией.
 
'''Системные функции'''
 
Библиотека предоставляет систему для использования в различных вычислительных средах:
 
* Параллелизация построения дерева с использованием всех ваших ядер процессора во время обучения.
* Распределенные вычисления для обучения очень крупных моделей с использованием кластера машин.
* Вычисления для очень больших наборов данных, которые не вписываются в память.
* Кэш Оптимизация структуры данных и алгоритма для наилучшего использования аппаратного обеспечения.
 
'''Особенности алгоритма'''
 
Реализация алгоритма была разработана для эффективности вычислительных ресурсов времени и памяти. Цель проекта заключалась в том, чтобы наилучшим образом использовать имеющиеся ресурсы для обучения модели. Некоторые ключевые функции реализации алгоритма включают:
 
* Различные стратегии обработки пропущенных данных.
* Блочная структура для поддержки распараллеливания обучения деревьев.
* Продолжение обучения для дообучения на новых данных.
==Основные параметры==
* ''n_estimators'' {{---}} число деревьев.
* ''eta'' {{---}} размер шага. Пердотвращает Предотвращает переобучение.
* ''gamma'' {{---}} минимальное изменение значения ''loss'' функции для разделения листа на поддеревья.
* ''max_depth'' {{---}} максимальная глубина дерева.
* ''lambda''/''alpha'' {{---}} ''L2''/''L1'' регуляризация.
Более полное описание Для более полного описания параметров модели тутсм. документацию<ref>[https://xgboost.readthedocs.io/en/latest/parameter.html XGBoost Parameters]</ref>. ==Поддерживаемые интерфейсы==* Интерфейс командной строки (CLI).* C++ (язык, на котором написана библиотека).* Интерфейс Python, а также модель в Scikit-Learn.* R интерфейс, а также модель в пакете карета.* Julia.* JVM языки, такие как Java, Scala, и платформы, такие как Hadoop.
==Пример использования с помощью библиотеки xgboost==
Загрузка датасета.
'''from''' sklearn '''import''' datasets
iris = datasets.'''load_iris'''()
X = iris.'''data'''
y = iris.'''target'''
from sklearn import datasets iris = datasets.load_iris() X = iris.data y = irisРазделение датасета на обучающую/тестовую выборку.target  '''from ''' sklearn.cross_validation '''import ''' train_test_split X_train, X_test, y_train, y_test = '''train_test_split'''(X, y, test_size=0.2, random_state=42)  import xgboost as xgb
Импорт ''XGBoost'' и создание необходимых объектов. '''import''' xgboost as xgb dtrain = xgb.'''DMatrix'''(X_train, label=y_train) dtest = xgb.'''DMatrix'''(X_test, label=y_test)
Задание параметров модели.
param = {
'max_depth': 3,
num_round = 20
Обучение. bst = xgb.'''train'''(param, dtrain, num_round) preds = bst.'''predict'''(dtest)
Определение качества модели на тестовой выборке. '''import ''' numpy '''as ''' np '''from ''' sklearn.metrics '''import ''' precision_score
best_preds = np.asarray([np.argmax(line) for line in preds])
'''print ''' precision_score(y_test, best_preds, average='macro')
==См. также==
* [https://towardsdatascience.com/xgboost-mathematics-explained-58262530904a XGBoost Mathematics Explained]
* [https://medium.com/@gabrieltseng/gradient-boosting-and-xgboost-c306c1bcfaf5 Gradient Boosting and XGBoost]
* [https://machinelearningmastery.com/gentle-introduction-xgboost-applied-machine-learning/ A Gentle Introduction to XGBoost for Applied Machine Learning]
[[Категория: Машинное обучение]]
[[Категория: Ансамбли]]
1632
правки

Навигация