<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Miksarus</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Miksarus"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Miksarus"/>
		<updated>2026-05-12T20:01:22Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=XGBoost&amp;diff=75128</id>
		<title>XGBoost</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=XGBoost&amp;diff=75128"/>
				<updated>2020-11-10T08:17:38Z</updated>
		
		<summary type="html">&lt;p&gt;Miksarus: /* Математика за алгоритмом */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''XGBoost'''&amp;lt;ref&amp;gt;[https://github.com/dmlc/xgboost GitHub project webpage]&amp;lt;/ref&amp;gt; {{---}} одна из самых популярных и эффективных реализаций алгоритма [[Бустинг,_AdaBoost|градиентного бустинга]] на деревьях на 2019-й год.&lt;br /&gt;
&lt;br /&gt;
==История==&lt;br /&gt;
XGBoost изначально стартовал как исследовательский проект Тяньцзи Чена (Tianqi Chen) как часть сообщества распределенного глубинного машинного обучения. Первоначально он начинался как терминальное приложение, которое можно было настроить с помощью файла конфигурации libsvm. После победы в Higgs Machine Learning Challenge, он стал хорошо известен в соревновательный кругах по машинному обеспечению. Вскоре после этого были созданы пакеты для Python и R, и теперь у него есть пакеты для многих других языков, таких как Julia, Scala, Java и т. д. Это принесло библиотеке больше разработчиков и сделало ее популярной среди сообщества Kaggle&amp;lt;ref&amp;gt;[https://www.kaggle.com/ Kaggle]&amp;lt;/ref&amp;gt;, где она использовалось для большого количества соревнований.&lt;br /&gt;
&lt;br /&gt;
Она вскоре стала использоваться с несколькими другими пакетами, что облегчает ее использование в соответствующих сообществах. Теперь у нее есть интеграция с scikit-learn для пользователей Python, а также с пакетом caret для пользователей R. Она также может быть интегрирована в рамах потока данных, таких как Apache Spark&amp;lt;ref&amp;gt;[https://spark.apache.org/ Apache Spark]&amp;lt;/ref&amp;gt;, Apache Hadoop&amp;lt;ref&amp;gt;[https://hadoop.apache.org/ Apache Hadoop]&amp;lt;/ref&amp;gt;, и Apache Flink&amp;lt;ref&amp;gt;[https://flink.apache.org/ Apache Flink]&amp;lt;/ref&amp;gt; с использованием абстрактных Rabit&amp;lt;ref&amp;gt;[https://github.com/dmlc/rabit Rabit]&amp;lt;/ref&amp;gt; и XGBoost4J&amp;lt;ref&amp;gt;[https://xgboost.readthedocs.io/en/latest/jvm/ XGBoost JVM]&amp;lt;/ref&amp;gt;. Принцип работы XGBoost также был опубликован Тяньцзи Ченом (Tianqi Chen) и Карлосом Гастрин (Carlos Guestrin).&lt;br /&gt;
&lt;br /&gt;
==Описание алгоритма==&lt;br /&gt;
[[File:golf-MSE.png|700px|thumb|[https://explained.ai/gradient-boosting/images/golf-MSE.png Иллюстрация бустинга]]]&lt;br /&gt;
В основе '''XGBoost''' лежит алгоритм [[Бустинг, AdaBoost|градиентного бустинга]] [[Дерево решений и случайный лес|деревьев решений]].&lt;br /&gt;
Градиентный бустинг — это техника машинного обучения для задач классификации и регрессии, которая строит модель предсказания в форме ансамбля слабых предсказывающих моделей, обычно деревьев решений.&lt;br /&gt;
Обучение ансамбля проводится последовательно в отличие, например от [[Виды_ансамблей | бэггинга]]. На каждой итерации вычисляются отклонения предсказаний уже обученного ансамбля на обучающей выборке. Следующая модель, которая будет добавлена в ансамбль будет предсказывать эти отклонения. Таким образом, добавив предсказания нового дерева к предсказаниям обученного ансамбля мы можем уменьшить среднее отклонение модели, котрое является таргетом оптимизационной задачи. Новые деревья добавляются в ансамбль до тех пор,&lt;br /&gt;
пока ошибка уменьшается, либо пока не выполняется одно из правил &amp;quot;ранней остановки&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим иллюстрацию бустинга. На ней рассматривается поведение модели на одной точке абстрактной задачи линейной регрессии. Предположим, что первая модель ансамбля &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; всегда выдает&lt;br /&gt;
выборочное среднее предсказываемой величины &amp;lt;tex&amp;gt;f_0&amp;lt;/tex&amp;gt;. Такое предсказание довольно грубое, поэтому среднеквадратичное отклонение на выбранной нами точке будет довольно большим. Мы попробуем это исправить обучив модель&lt;br /&gt;
&amp;lt;tex&amp;gt;\Delta_1&amp;lt;/tex&amp;gt;, которая будет &amp;quot;корректировать&amp;quot; предсказание предыдущего ансамбля &amp;lt;tex&amp;gt;F_0&amp;lt;/tex&amp;gt;. Таким образом мы получим ансамбль &amp;lt;tex&amp;gt;F_1&amp;lt;/tex&amp;gt;, предсказание которого будет суммироваться из предсказаний моделей &amp;lt;tex&amp;gt;f_0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\Delta_1&amp;lt;/tex&amp;gt;. Продолжая такую последовательность мы приходим к ансамблю &amp;lt;tex&amp;gt;F_4&amp;lt;/tex&amp;gt; предсказание которого суммируется из предсказаний &amp;lt;tex&amp;gt;f_0&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\Delta_1&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\Delta_2&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\Delta_3&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\Delta_4&amp;lt;/tex&amp;gt; и предсказывает в точности значение заданного таргета.&lt;br /&gt;
===Математика за алгоритмом===&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathcal{L}^{(t)} = \sum_{i=1}^n l(y_i,\hat{y_i}^{(t-1)}+f_t(x_i))+\Omega(f_t)&amp;lt;/tex&amp;gt; {{---}} функция для оптимизации градиентного бустинга, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;l&amp;lt;/tex&amp;gt; {{---}} функция потерь, см. [[Общие понятия|Общие понятия]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;y_i, \hat{y_i}^{t}&amp;lt;/tex&amp;gt; {{---}} значение ''i''-го элемента обучающей выборки и сумма предсказаний первых ''t'' деревьев соответственно.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;x_i&amp;lt;/tex&amp;gt; {{---}} набор признаков ''i''-го элемента обучающей выборки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;f_t&amp;lt;/tex&amp;gt; {{---}} функция (в нашем случае дерево), которую мы хотим обучить на шаге ''t''. &amp;lt;tex&amp;gt;f_t(x_i)&amp;lt;/tex&amp;gt; {{---}} предсказание на ''i''-ом элементе обучающей выборки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Omega(f)&amp;lt;/tex&amp;gt; {{---}} регуляризация функции &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;\Omega(f) = \gamma T + \frac{1}{2} \lambda \lVert w \rVert ^2&amp;lt;/tex&amp;gt;, где T {{---}} количество вершин в дереве,&lt;br /&gt;
&amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; {{---}} значения в листьях, а &amp;lt;tex&amp;gt;\gamma&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\lambda&amp;lt;/tex&amp;gt; {{---}} параметры регуляризации.&lt;br /&gt;
&lt;br /&gt;
Дальше с помощью разложения Тейлора до второго члена можем приблизить оптимизируемую функцию &amp;lt;tex&amp;gt;\mathcal{L}^{(t)}&amp;lt;/tex&amp;gt; следующим выражением:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\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)&amp;lt;/tex&amp;gt;, где&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;g_i = \frac {\partial {l(y_i,\hat{y_i}^{t-1})}}{\partial{\hat{y_i}^{t-1}}}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;h_i = \frac {\partial^2 {l(y_i,\hat{y_i}^{t-1})}}{\partial^2{\hat{y_i}^{t-1}}}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поскольку мы хотим минимизировать ошибку модели на обучающей выборки, нам нужно найти минимум &amp;lt;tex&amp;gt;\mathcal{L}^{(t)}&amp;lt;/tex&amp;gt; для каждого ''t''.&lt;br /&gt;
&lt;br /&gt;
Минимум этого выражения относительно &amp;lt;tex&amp;gt;f_t(x_i)&amp;lt;/tex&amp;gt; находится в точке &amp;lt;tex&amp;gt;f_t(x_i) = \frac{-g_i}{h_i}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждое отдельное дерево ансамбля &amp;lt;tex&amp;gt;f_t(x_i)&amp;lt;/tex&amp;gt; обучается стандартным алгоритмом. Для более полного описания см. [[Дерево решений и случайный лес|Дерево решений и случайный лес]].&lt;br /&gt;
&lt;br /&gt;
==Возможности XGBoost==&lt;br /&gt;
'''Особенности модели'''&lt;br /&gt;
&lt;br /&gt;
XGBoost поддерживает все возможности таких библиотек как scikit-learn с возможностью добавлять регуляризацию. Поддержаны три главные формы градиетного бустинга:&lt;br /&gt;
&lt;br /&gt;
* Стандартный [[Бустинг,_AdaBoost|градиентный бустинг]] с возможностью изменения скорости обучения(''learning rate'').&lt;br /&gt;
* Стохастический градиентный бустинг&amp;lt;ref&amp;gt;[https://statweb.stanford.edu/~jhf/ftp/stobst.pdf Stochastic Gradient Boosting]&amp;lt;/ref&amp;gt; с возможностью семплирования по строкам и колонкам датасета.&lt;br /&gt;
* Регуляризованный градиентный бустинг&amp;lt;ref&amp;gt;[https://arxiv.org/pdf/1806.09762.pdf Regularized Gradient Boosting]&amp;lt;/ref&amp;gt; с L1 и L2 регуляризацией.&lt;br /&gt;
&lt;br /&gt;
'''Системные функции'''&lt;br /&gt;
&lt;br /&gt;
Библиотека предоставляет систему для использования в различных вычислительных средах:&lt;br /&gt;
&lt;br /&gt;
* Параллелизация построения дерева с использованием всех ваших ядер процессора во время обучения.&lt;br /&gt;
* Распределенные вычисления для обучения очень крупных моделей с использованием кластера машин.&lt;br /&gt;
* Вычисления для очень больших наборов данных, которые не вписываются в память.&lt;br /&gt;
* Кэш Оптимизация структуры данных и алгоритма для наилучшего использования аппаратного обеспечения.&lt;br /&gt;
&lt;br /&gt;
'''Особенности алгоритма'''&lt;br /&gt;
&lt;br /&gt;
Реализация алгоритма была разработана для эффективности вычислительных ресурсов времени и памяти. Цель проекта заключалась в том, чтобы наилучшим образом использовать имеющиеся ресурсы для обучения модели. Некоторые ключевые функции реализации алгоритма включают:&lt;br /&gt;
&lt;br /&gt;
* Различные стратегии обработки пропущенных данных.&lt;br /&gt;
* Блочная структура для поддержки распараллеливания обучения деревьев.&lt;br /&gt;
* Продолжение обучения для дообучения на новых данных.&lt;br /&gt;
&lt;br /&gt;
==Основные параметры==&lt;br /&gt;
* ''n_estimators'' {{---}} число деревьев.&lt;br /&gt;
* ''eta'' {{---}} размер шага. Предотвращает переобучение.&lt;br /&gt;
* ''gamma'' {{---}} минимальное изменение значения ''loss'' функции для разделения листа на поддеревья.&lt;br /&gt;
* ''max_depth'' {{---}} максимальная глубина дерева.&lt;br /&gt;
* ''lambda''/''alpha'' {{---}} ''L2''/''L1'' регуляризация.&lt;br /&gt;
&lt;br /&gt;
Для более полного описания параметров модели см. документацию&amp;lt;ref&amp;gt;[https://xgboost.readthedocs.io/en/latest/parameter.html XGBoost Parameters]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Поддерживаемые интерфейсы==&lt;br /&gt;
* Интерфейс командной строки (CLI).&lt;br /&gt;
* C++ (язык, на котором написана библиотека).&lt;br /&gt;
* Интерфейс Python, а также модель в Scikit-Learn.&lt;br /&gt;
* R интерфейс, а также модель в пакете карета.&lt;br /&gt;
* Julia.&lt;br /&gt;
* JVM языки, такие как Java, Scala, и платформы, такие как Hadoop.&lt;br /&gt;
&lt;br /&gt;
==Пример использования с помощью библиотеки xgboost==&lt;br /&gt;
Загрузка датасета.&lt;br /&gt;
 '''from''' sklearn '''import''' datasets&lt;br /&gt;
 iris = datasets.'''load_iris'''()&lt;br /&gt;
 X = iris.'''data'''&lt;br /&gt;
 y = iris.'''target'''&lt;br /&gt;
&lt;br /&gt;
Разделение датасета на обучающую/тестовую выборку.&lt;br /&gt;
 '''from''' sklearn.cross_validation '''import''' train_test_split&lt;br /&gt;
 X_train, X_test, y_train, y_test = '''train_test_split'''(X, y, test_size=0.2, random_state=42)&lt;br /&gt;
&lt;br /&gt;
Импорт ''XGBoost'' и создание необходимых объектов.&lt;br /&gt;
 '''import''' xgboost as xgb&lt;br /&gt;
 dtrain = xgb.'''DMatrix'''(X_train, label=y_train)&lt;br /&gt;
 dtest = xgb.'''DMatrix'''(X_test, label=y_test)&lt;br /&gt;
&lt;br /&gt;
Задание параметров модели.&lt;br /&gt;
 param = {&lt;br /&gt;
    'max_depth': 3,&lt;br /&gt;
    'eta': 0.3, &lt;br /&gt;
    'silent': 1, &lt;br /&gt;
    'objective': 'multi:softprob',&lt;br /&gt;
    'num_class': 3}&lt;br /&gt;
 num_round = 20&lt;br /&gt;
&lt;br /&gt;
Обучение.&lt;br /&gt;
 bst = xgb.'''train'''(param, dtrain, num_round)&lt;br /&gt;
 preds = bst.'''predict'''(dtest)&lt;br /&gt;
&lt;br /&gt;
Определение качества модели на тестовой выборке.&lt;br /&gt;
 '''import''' numpy '''as''' np&lt;br /&gt;
 '''from''' sklearn.metrics '''import''' precision_score&lt;br /&gt;
 best_preds = np.asarray([np.argmax(line) for line in preds])&lt;br /&gt;
 '''print''' precision_score(y_test, best_preds, average='macro')&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Дерево решений и случайный лес|Дерево решений и случайный лес]]&lt;br /&gt;
*[[:Бустинг, AdaBoost|Бустинг, AdaBoost]]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* [https://arxiv.org/abs/1603.02754 Tianqi Chen, Carlos Guestrin. XGBoost: A Scalable Tree Boosting System]&lt;br /&gt;
* [https://towardsdatascience.com/xgboost-mathematics-explained-58262530904a XGBoost Mathematics Explained]&lt;br /&gt;
* [https://medium.com/@gabrieltseng/gradient-boosting-and-xgboost-c306c1bcfaf5 Gradient Boosting and XGBoost]&lt;br /&gt;
* [https://machinelearningmastery.com/gentle-introduction-xgboost-applied-machine-learning/ A Gentle Introduction to XGBoost for Applied Machine Learning]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Ансамбли]]&lt;/div&gt;</summary>
		<author><name>Miksarus</name></author>	</entry>

	</feed>