Что такое XGBoost?

XGBoost (Extreme Gradient Boosting) — популярный алгоритм машинного обучения, который широко используется в проектах по науке о данных и машинному обучению. Это тип ансамблевого метода обучения, который объединяет несколько слабых моделей для создания более сильной модели. В частности, XGBoost — это алгоритм повышения градиента, который итеративно обучает деревья решений на остатках предыдущих деревьев с целью минимизации функции потерь.

Вот некоторые ключевые особенности и преимущества XGBoost:

Регуляризация:

Обработка разреженных данных:

  • Отсутствующие значения или этапы обработки данных, такие как горячее кодирование, делают данные разреженными. XGBoost включает в себя алгоритм поиска разделения с учетом разреженности для обработки различных типов шаблонов разреженности в данных.

Эскиз взвешенного квантиля:

  • Большинство существующих алгоритмов на основе дерева могут находить точки разделения, когда точки данных имеют равные веса (используя алгоритм квантильного эскиза). Однако они не приспособлены для обработки взвешенных данных. XGBoost имеет распределенный алгоритм эскиза взвешенных квантилей для эффективной обработки взвешенных данных.

Структура блоков для параллельного обучения:

  • Для более быстрых вычислений XGBoost может использовать несколько ядер ЦП. Это возможно благодаря блочной структуре конструкции системы. Данные сортируются и хранятся в единицах памяти, называемых блоками.

Осведомленность о кэше:

  • В алгоритме классификатора XGBoost требуется прерывистый доступ к памяти для получения статистики градиента по индексу строки. Следовательно, XGBoost был разработан для оптимального использования оборудования. Это делается путем выделения внутренних буферов в каждом потоке, где может храниться статистика градиента.

Внешние вычисления:

  • Эта функция оптимизирует доступное дисковое пространство и максимизирует его использование при обработке огромных наборов данных, которые не помещаются в память.

Производительность модели XGBoost

Как показано на диаграмме выше, модель XGBoost имеет наилучшее сочетание производительности прогнозирования и времени обработки по сравнению с другими алгоритмами.

Поняв его основные принципы и настроив его гиперпараметры, вы можете использовать XGBoost для создания точных и эффективных моделей, которые могут делать точные прогнозы на основе новых данных.

Как работает алгоритм XGBoost

Примеры

Рассмотрим пример набора данных:

  • Сначала мы берем базового учащегося, по умолчанию базовая модель всегда берет среднюю зарплату, т.е.
  • (100к). Теперь вычисляем остаточные значения:

  • Теперь давайте рассмотрим дерево решений, мы будем разбивать данные на основе опыта ‹=2 или иначе.

  • Теперь давайте посчитаем метрики подобия левой и правой стороны. Поскольку это проблема регрессии, метрика подобия будет:

где лямбда ( λ ) = гиперпараметр

и для задачи классификации:

где P_r = вероятность любой левой или правой стороны. Возьмем λ = 1 и рассчитаем метрики сходства:

Sₗ = (-4)² / (2 + 1) = 16/3 = 5,33 для правой стороны.

Sᵣ = (4)² / (4+ 1) = 16/5 = 3,2 для правой стороны.

Sᵗ = 1/7 = 0,147 для верхней ветви

  • Теперь информационный выигрыш от этого разделения составляет:

УСИЛЕНИЕ = Sₗ + Sᵣ - Sᵗ = 5,33 + 3,2 - 0,147 = 9,328

Точно так же мы можем попробовать несколько разбиений и рассчитать прирост информации. Мы возьмем раскол с наибольшим приростом информации. Давайте пока возьмем этот информационный прирост. Далее мы разделим дерево решений, если есть пробел или нет.

  • Теперь, как вы можете заметить, я не разделился на левую сторону, потому что прирост информации становится отрицательным. Итак, мы выполняем разделение только на правую сторону.
  • Чтобы рассчитать конкретный результат, мы следуем дереву решений, умножаемому на скорость обучения \alpha (возьмем 0,5) и добавляем к предыдущему учащемуся (базовый учащийся для первого дерева), т.е. для точки данных 1: o/p = 6 + 0,5 *-2 =5. Так делается наша таблица.
  • Точно так же алгоритм создает более одного дерева решений и аддитивно комбинирует их для получения более точных оценок.

Вот простой пошаговый обзор того, как работает XGBoost:

Определите проблему. Во-первых, вам нужно определить вашу проблему как проблему регрессии или классификации. Например, вы можете попытаться предсказать цены на жилье (регрессия) или вероятность оттока клиентов (классификация).

# import the libraries needed
import pandas as pd
import numpy as np
import warnings
warnings.filterwarnings('ignore')
# Import the dataset from scikit-learn library, and assign to a variable
from sklearn.datasets import load_boston
boston = load_boston()
# If you have another practice dataset import at this step
# assign your target
boston['PRICE'] = boston.target 
# assign the data to target and independent variables
X = boston.data
y = boston['PRICE']

Подготовка данных. Затем вам нужно подготовить данные для XGBoost. Это включает в себя очистку данных, разделение их на обучающие и тестовые наборы и преобразование их в формат, который может использовать XGBoost (например, в матрицу).

# split the data into train and test set. The test size here is 30% of the data
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X,y, test_size = 0.3,
                                                    random_state = 4)

Обучение модели. После указания модели ее можно обучить на обучающем наборе. Во время обучения XGBoost подбирает ряд деревьев решений к данным, причем каждое дерево пытается минимизировать остатки предыдущих деревьев.

# import xgboost regressor algorithm and fit the model
from xgboost import XGBRegressor
xgb = XGBRegressor()
xgb.fit(X_train, y_train)
# After training the model, make a prediction on the train data
y_pred = xgb.predict(X_train)

Обучение и прогнозирование XGBoost: используя параметры по умолчанию, мы строим модель регрессии с помощью пакета XGBoost.

# import metrics to evaluate the performance of the XGBoost model
from sklearn import metrics
print('R^2:',metrics.r2_score(y_train, y_pred))
print('Adjusted R^2:',1 - (1-metrics.r2_score(y_train, y_pred))*(len(y_train)-1)/(len(y_train)-X_train.shape[1]-1))
print('MAE:',metrics.mean_absolute_error(y_train, y_pred))
print('MSE:',metrics.mean_squared_error(y_train, y_pred))
print('RMSE:',np.sqrt(metrics.mean_squared_error(y_train, y_pred)))

Оценка модели. Мы оценили регрессионную модель сборки.

# Appply the model to the test set
y_test_pred = xgb.predict(X_test)
# Evaluate the performance of the model on the test set
acc_xgb = metrics.r2_score(y_test, y_test_pred)
print('R^2:', acc_xgb)
print('Adjusted R^2:',1 - (1-metrics.r2_score(y_test, y_test_pred))*(len(y_test)-1)/(len(y_test)-X_test.shape[1]-1))
print('MAE:',metrics.mean_absolute_error(y_test, y_test_pred))
print('MSE:',metrics.mean_squared_error(y_test, y_test_pred))
print('RMSE:',np.sqrt(metrics.mean_squared_error(y_test, y_test_pred)))

Повторение и улучшение. Если производительность модели неудовлетворительна, вы можете повторить и улучшить ее, изменив гиперпараметры или попробовав различные методы предварительной обработки.

Гиперпараметры, задействованные в алгоритме XG-Boost

Чтобы изучить любой алгоритм машинного обучения, мы должны знать различные факторы, которые могут повлиять на производительность нашей модели, когда мы пытаемся вписать этот алгоритм в наш набор данных. В XG-Boost эти факторы таковы:

1 n_estimators: количество деревьев, которые мы хотим вырастить последовательно.

2.max_depth: максимально допустимая глубина дерева.

3 learning_rate: говорят, что медленные ученики учатся лучше, и чтобы контролировать шаг обновления в остатках, нам нужно настроить скорость обучения.

4 subsample: для управления коэффициентом выборки строк.

5 colsamplebytree, colsamplebylevel: для управления коэффициентом выборки столбцов.

В дополнение к этим. XG-Boost предоставляет функциональность, в которой мы можем определить сетку значений (несколько значений этих параметров в массивах), а встроенная техника перекрестной проверки найдет лучший набор параметров.

Когда и когда не использовать XGBoost

Когда использовать XGBoost

  • У вас есть большое количество обучающих выборок. Определение крупности по этому критерию разнится. Как правило, приемлемым считается набор данных, превышающий 1000 обучающих выборок и несколько функций, возможно, 100.
  • На практике, если количество функций в обучающем наборе меньше количества обучающих выборок, XGBoost будет работать нормально.
  • XGBoost работает, когда у вас есть смесь категориальных и числовых функций — или только числовых функций в наборе данных. ‘

Когда не использовать XGBoost

  • Алгоритм XGBoost не будет работать хорошо, если проблема набора данных не подходит для его функций.
  • Точнее, XGBoost не будет работать с набором данных с такими проблемами, как обработка естественного языка (NLP), компьютерное зрение, распознавание изображений и проблемы с пониманием.
  • Эти наборы данных лучше всего решаются с помощью методов глубокого обучения.
  • XGBoost не следует использовать, если размер набора обучающих данных мал. Если обучающий набор меньше количества функций, XGBoost будет неэффективным.

Заключение

В целом, XGBoost — это мощный и гибкий алгоритм машинного обучения, который может достигать высокой точности в различных задачах. Понимая его основные принципы и следуя передовым методам подготовки данных и настройки гиперпараметров, вы можете использовать XGBoost для создания высококачественных моделей, которые хорошо обобщают новые данные.

Примечание: я надеюсь, что вам понравилась эта статья. Пожалуйста, оставьте мне свои комментарии ниже.