Эта статья содержит ::
1. Введение в XGBoost
2. Как формируются деревья в XG Boost
3. XG Boost :: Реализация (код Python)
4. Поиск по сетке в XG Boost
5. Перекрестная проверка в XG Boost
6. Байесовская оптимизация в XG Boost
7. Обработка пропущенных значений в XGBoost
8. Оценка в XGBoost
9 , Показатели оценки в XGBoost
10. Плюсы и минусы XGBoost

Введение в XGBoost

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

Как формируются деревья в XG Boost

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

Вот общий обзор шагов, связанных с созданием деревьев в XGBoost:

  1. Инициализация базового обучающегося: XGBoost начинает с обучения простого базового обучающегося, такого как дерево решений с одним разбиением, на входных данных.
  2. Вычислите остатки: прогнозы от базового обучаемого используются для вычисления остатков, которые представляют собой разницу между фактическими целевыми значениями и прогнозируемыми значениями.
  3. Соответствие следующему дереву: XGBoost затем обучает другое дерево решений по остаткам и обновляет прогнозы.
  4. Повторяйте шаги 2 и 3 до тех пор, пока не будет выполнен критерий остановки: процесс подбора деревьев решений по остаткам и обновления прогнозов продолжается до тех пор, пока не будет выполнен критерий остановки, такой как максимальное количество деревьев или пороговое значение для улучшения потерь. достигаемая функция.
  5. Объедините деревья: окончательная модель представляет собой сумму прогнозов всех отдельных деревьев решений.

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

XG Boost :: Реализация (код Python)

import xgboost as xgb
import numpy as np
import pandas as pd

# Load data
dtrain = xgb.DMatrix(data, label=labels)

# Define parameters for XGBoost
params = {'objective':'binary:logistic',
          'max_depth':2,
          'silent':1,
          'eta':1}

# Train XGBoost model
num_rounds = 5
bst = xgb.train(params, dtrain, num_rounds)

# Predict on new data
dtest = xgb.DMatrix(test_data)
preds = bst.predict(dtest)

В этом примере мы сначала загружаем данные, используя DMatrix из XGBoost, который представляет собой оптимизированную структуру данных для библиотеки. Далее мы указываем гиперпараметры для модели в словаре params. Параметр objective указывает минимизируемую функцию потерь, и в данном случае это бинарная логистическая регрессия. Параметр max_depth указывает максимальную глубину деревьев в модели, а eta — скорость обучения.

После определения параметров мы обучаем модель XGBoost, вызывая xgb.train, передавая параметры и данные обучения, а также количество раундов для обучения модели. Наконец, мы используем обученную модель для прогнозирования новых данных с помощью bst.predict.

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

Поиск по сетке в XG Boost

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

import xgboost as xgb
import numpy as np
import pandas as pd
from sklearn.model_selection import GridSearchCV

# Load data
dtrain = xgb.DMatrix(data, label=labels)

# Define parameter grid for grid search
param_grid = {'max_depth': [2, 4, 6],
              'eta': [0.1, 0.2, 0.3]}

# Define XGBoost model
xgb_model = xgb.XGBClassifier(objective='binary:logistic')

# Perform grid search
grid_search = GridSearchCV(xgb_model, param_grid, cv=5)
grid_search.fit(data, labels)

# Get best parameters
best_params = grid_search.best_params_

В этом примере мы сначала создаем сетку параметров param_grid, которая указывает значения для поиска двух гиперпараметров: max_depth и eta. Затем мы создаем модель XGBoost xgb_model с указанной целью (бинарная логистическая регрессия).

Затем мы выполняем поиск по сетке, используя GridSearchCV из библиотеки sklearn, передавая модель XGBoost, сетку параметров и количество сгибов для перекрестной проверки (в данном случае 5). После завершения поиска в сетке мы используем атрибут best_params_ для извлечения гиперпараметров, обеспечивающих наилучшую производительность.

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

Перекрестная проверка в XG Boost

XGBoost предоставляет встроенные возможности перекрестной проверки, которые позволяют оценить производительность вашей модели и определить оптимальные гиперпараметры. Вот пример того, как выполнить перекрестную проверку в XGBoost:

import xgboost as xgb
import numpy as np
import pandas as pd
from sklearn.model_selection import GridSearchCV

# Load data
dtrain = xgb.DMatrix(data, label=labels)

# Define parameter grid for grid search
param_grid = {'max_depth': [2, 4, 6],
              'eta': [0.1, 0.2, 0.3]}

# Define XGBoost model
xgb_model = xgb.XGBClassifier(objective='binary:logistic')

# Perform grid search
grid_search = GridSearchCV(xgb_model, param_grid, cv=5)
grid_search.fit(data, labels)

# Get best parameters
best_params = grid_search.best_params_

В этом примере мы сначала создаем сетку параметров param_grid, которая указывает значения для поиска двух гиперпараметров: max_depth и eta. Затем мы создаем модель XGBoost xgb_model с указанной целью (бинарная логистическая регрессия).

Затем мы выполняем поиск по сетке, используя GridSearchCV из библиотеки sklearn, передавая модель XGBoost, сетку параметров и количество сгибов для перекрестной проверки (в данном случае 5). После завершения поиска в сетке мы используем атрибут best_params_ для извлечения гиперпараметров, обеспечивающих наилучшую производительность.

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

Байесовская оптимизация в XG Boost

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

from bayes_opt import BayesianOptimization
import xgboost as xgb
import numpy as np

def xgboost_evaluate(max_depth, subsample, colsample_bytree, learning_rate):
    params = {
        'booster': 'gbtree',
        'objective': 'binary:logistic',
        'eval_metric': 'error',
        'max_depth': int(max_depth),
        'subsample': subsample,
        'colsample_bytree': colsample_bytree,
        'learning_rate': learning_rate
    }
    
    cv_result = xgb.cv(params, dtrain, num_boost_round=100, nfold=5, metrics=['error'], seed=0)
    
    return -1.0 * cv_result['test-error-mean'].iloc[-1]

# Define bounds for hyperparameters
bounds = {
    'max_depth': (2, 10),
    'subsample': (0.1, 1.0),
    'colsample_bytree': (0.1, 1.0),
    'learning_rate': (0.01, 1.0)
}

# Load data
dtrain = xgb.DMatrix(data, label=labels)

# Perform Bayesian optimization
optimizer = BayesianOptimization(f=xgboost_evaluate, pbounds=bounds, verbose=2)
optimizer.maximize(init_points=5, n_iter=20)

# Get best parameters
best_params = optimizer.max['params']

В этом примере мы определяем функцию xgboost_evaluate, которая принимает в качестве входных гиперпараметров max_depth, subsample, colsample_bytree и learning_rate и возвращает ошибку модели XGBoost, обученной с этими гиперпараметрами. Модель обучается с помощью перекрестной проверки с 5-кратным повторением и 100 раундами бустинга.

Затем мы определяем границы для гиперпараметров, загружаем данные и создаем экземпляр класса BayesianOptimization. Затем мы вызываем метод maximize для выполнения байесовской оптимизации, передавая количество точек инициализации (5) и количество итераций (20).

Наконец, мы извлекаем лучшие гиперпараметры из атрибута max объекта optimizer.

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

Обработка пропущенных значений в XGBoost

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

  1. Вменение среднего: XGBoost вменяет пропущенные значения со средним значением соответствующего столбца. Этот подход прост и является поведением XGBoost по умолчанию.
  2. Вменение медианы: в качестве альтернативы XGBoost может вменить пропущенные значения с помощью медианы соответствующего столбца.
  3. Пользовательское вменение: в случаях, когда среднее или медианное вменение не имеет смысла, XGBoost позволяет использовать пользовательское вменение, указав определяемое пользователем значение для замены отсутствующих значений.
  4. Отсутствующие значения как отдельная категория: XGBoost также позволяет рассматривать отсутствующие значения как отдельную категорию в процессе построения дерева. Этот подход помогает уловить влияние пропущенных значений на целевую переменную.

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

Оценка в XGBoost

В XGBoost оценка относится к процессу оценки производительности обученной модели на новом наборе данных. Ниже представлен процесс подсчета очков в XGBoost:

  1. Загрузите обученную модель: первый шаг — загрузить сохраненную модель в память.
  2. Подготовьте тестовые данные: тестовые данные должны быть в том же формате, что и обучающие данные, включая те же функции и целевую переменную.
  3. Делайте прогнозы. Затем модель используется для прогнозирования тестовых данных путем вызова метода «прогнозировать».
  4. Оценка производительности. Производительность модели оценивается путем сравнения прогнозируемых значений с фактическими целевыми значениями в тестовых данных. Это делается с использованием показателей производительности, таких как точность, воспроизводимость, полнота, оценка F1 или среднеквадратическая ошибка (для задач регрессии).
  5. Интерпретация результатов. Наконец, результаты оценки интерпретируются для понимания сильных и слабых сторон модели и принятия решений о дальнейшей доработке или улучшениях.

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

Показатели оценки в XGBoost

Метрики оценки, используемые в XGBoost, зависят от типа решаемой проблемы. Вот некоторые из наиболее часто используемых показателей оценки в XGBoost для различных типов проблем:

  1. Проблемы регрессии:
  • Среднеквадратическая ошибка (MSE)
  • Среднеквадратичная ошибка (RMSE)
  • Средняя абсолютная ошибка (MAE)
  • R-квадрат

2. Проблемы с бинарной классификацией:

  • Точность
  • Точность
  • Отзывать
  • F1-счет
  • Площадь под кривой рабочих характеристик приемника (AUC-ROC)
  • Потеря журнала

3. Проблемы классификации нескольких классов:

  • Точность
  • Точность
  • Отзывать
  • F1-счет
  • Потеря журнала
  • Матрица путаницы

Важно отметить, что разные показатели оценки могут больше подходить для разных типов проблем, и часто необходимо использовать несколько показателей оценки, чтобы получить полное представление о производительности модели. Например, точность не всегда может быть лучшим показателем для несбалансированных наборов данных, в то время как AUC-ROC может быть лучшим показателем в таких случаях.

Плюсы и минусы XGBoost

Плюсы XGBoost:

  1. Масштабируемость: XGBoost может эффективно обрабатывать очень большие наборы данных.
  2. Скорость: XGBoost — один из самых быстрых доступных алгоритмов повышения градиента.
  3. Гибкость: XGBoost предоставляет широкий спектр возможностей для настройки модели и ее производительности.
  4. Надежность: XGBoost может эффективно обрабатывать пропущенные значения и зашумленные данные.
  5. Высокая точность: XGBoost обладает высокой точностью, особенно в задачах классификации и регрессии, и был использован для победы в нескольких соревнованиях по машинному обучению.

Минусы XGBoost:

  1. Сложность: XGBoost может быть сложным для понимания и реализации для начинающих, особенно когда речь идет о выборе и настройке гиперпараметров.
  2. Overfitting: XGBoost может переобучать данные, если они не настроены должным образом или если данные зашумлены.
  3. Использование памяти: XGBoost может интенсивно использовать память, особенно при работе с большими наборами данных.
  4. Длительное время обучения: обучение XGBoost может занять много времени, особенно когда используется большое количество деревьев или когда данные очень велики.

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