Изменения

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

XGBoost

3609 байт добавлено, 13:49, 17 октября 2019
Основные параметры: опечатка
==Описание алгоритма==
[[File:golf-MSE.png|700px|thumb|[https://explained.ai/gradient-boosting/images/golf-MSE.png Иллюстрация бустинга]]]
В основе '''XGBoost''' лежит алгоритм [[Бустинг, AdaBoost|градиентного бустинга]] [[Дерево решений и случайный лес|деревьев решений]]. Идея алгоритма Градиентный бустинг — это техника машинного обучения для задач классификации и регрессии, которая строит модель предсказания в томформе ансамбля слабых предсказывающих моделей, что каждое следующе дерево предсказывает ошибку обычно деревьев решений.Обучение ансамбля проводится последовательно в отличие, например от [[Виды_ансамблей | бэггинга]]. На каждой итерации вычисляются отклонения предсказаний уже обученного ансамбля на каждом элементе обучающей выборкивыборке. Каждое отдельное дерево обучается одним из стандартных алгоритмов используемых для обучения деревьев решенийСледующая модель, которая будет добавлена в ансамбль будет предсказывать эти отклонения. Таким образом предсказание складывается из предсказаний каждого отдельного , добавив предсказания нового дерева к предсказаниям обученного ансамблямы можем уменьшить среднее отклонение модели, котрое является таргетом оптимизационной задачи. Новые деревья добавляются в ансамбль до тех пор,пока ошибка уменьшается, либо пока не выполняется одно из правил "ранней остановки".
Рассмотрим иллюстрацию бустинга. На ней рассматривается поведение модели на одной точке абстрактной задачи линейной регрессии. Предположим, что первая модель ансамбля <tex>F</tex> всегда выдает
выборочное среднее предсказываемой величины <tex>f_0</tex>. Такое предсказание довольно грубое, поэтому среднеквадратичное отклонение на выбранной нами точке будет довольно большим. Мы попробуем это исправить обучив модель
<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>, где
'''Особенности модели'''
Реализация модели XGBoost поддерживает особенности реализации все возможности таких библиотек как scikit-learn и R с новыми дополнениями, такими как регуляризациявозможностью добавлять регуляризацию. Поддерживаются Поддержаны три основные главные формы повышения градиентаградиетного бустинга:
* Алгоритм Gradient Boosting также называется градиентной машиной повышенияСтандартный [[Бустинг, включая скорость _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регуляризацией.
'''Системные функции'''
Библиотека предоставляет систему для использования в различных вычислительных средах, не в последнюю очередь:
* Параллелизация построения дерева с использованием всех ваших ядер процессора во время обучения.
* Распределенные вычисления для обучения очень крупных моделей с использованием кластера машин.
* Внекорпоративные вычисления Вычисления для очень больших наборов данных, которые не вписываются в память.
* Кэш Оптимизация структуры данных и алгоритма для наилучшего использования аппаратного обеспечения.
Реализация алгоритма была разработана для эффективности вычислительных ресурсов времени и памяти. Цель проекта заключалась в том, чтобы наилучшим образом использовать имеющиеся ресурсы для обучения модели. Некоторые ключевые функции реализации алгоритма включают:
* Редкая реализация Aware с автоматической обработкой отсутствующих значений Различные стратегии обработки пропущенных данных.* Блочная структура для поддержки распараллеливания конструкции дереваобучения деревьев.* Продолжение обучения, чтобы вы могли еще больше повысить уже установленную модель для дообучения на новых данных.
==Основные параметры==
* ''n_estimators'' {{---}} число деревьев.
* ''eta'' {{---}} размер шага. Пердотвращает Предотвращает переобучение.
* ''gamma'' {{---}} минимальное изменение значения ''loss'' функции для разделения листа на поддеревья.
* ''max_depth'' {{---}} максимальная глубина дерева.
Для более полного описания параметров модели см. документацию<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]
[[Категория: Машинное обучение]]
[[Категория: Ансамбли]]
Анонимный участник

Навигация