Эта статья содержит ::
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:
- Инициализация базового обучающегося: XGBoost начинает с обучения простого базового обучающегося, такого как дерево решений с одним разбиением, на входных данных.
- Вычислите остатки: прогнозы от базового обучаемого используются для вычисления остатков, которые представляют собой разницу между фактическими целевыми значениями и прогнозируемыми значениями.
- Соответствие следующему дереву: XGBoost затем обучает другое дерево решений по остаткам и обновляет прогнозы.
- Повторяйте шаги 2 и 3 до тех пор, пока не будет выполнен критерий остановки: процесс подбора деревьев решений по остаткам и обновления прогнозов продолжается до тех пор, пока не будет выполнен критерий остановки, такой как максимальное количество деревьев или пороговое значение для улучшения потерь. достигаемая функция.
- Объедините деревья: окончательная модель представляет собой сумму прогнозов всех отдельных деревьев решений.
В 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 обрабатывает пропущенные значения несколькими способами:
- Вменение среднего: XGBoost вменяет пропущенные значения со средним значением соответствующего столбца. Этот подход прост и является поведением XGBoost по умолчанию.
- Вменение медианы: в качестве альтернативы XGBoost может вменить пропущенные значения с помощью медианы соответствующего столбца.
- Пользовательское вменение: в случаях, когда среднее или медианное вменение не имеет смысла, XGBoost позволяет использовать пользовательское вменение, указав определяемое пользователем значение для замены отсутствующих значений.
- Отсутствующие значения как отдельная категория: XGBoost также позволяет рассматривать отсутствующие значения как отдельную категорию в процессе построения дерева. Этот подход помогает уловить влияние пропущенных значений на целевую переменную.
Как правило, перед обучением модели машинного обучения рекомендуется выполнять очистку и вменение данных, поскольку пропущенные значения могут существенно повлиять на производительность модели. Однако способность XGBoost обрабатывать пропущенные значения может быть полезна в случаях, когда очистка данных невозможна или при работе с разреженными наборами данных.
Оценка в XGBoost
В XGBoost оценка относится к процессу оценки производительности обученной модели на новом наборе данных. Ниже представлен процесс подсчета очков в XGBoost:
- Загрузите обученную модель: первый шаг — загрузить сохраненную модель в память.
- Подготовьте тестовые данные: тестовые данные должны быть в том же формате, что и обучающие данные, включая те же функции и целевую переменную.
- Делайте прогнозы. Затем модель используется для прогнозирования тестовых данных путем вызова метода «прогнозировать».
- Оценка производительности. Производительность модели оценивается путем сравнения прогнозируемых значений с фактическими целевыми значениями в тестовых данных. Это делается с использованием показателей производительности, таких как точность, воспроизводимость, полнота, оценка F1 или среднеквадратическая ошибка (для задач регрессии).
- Интерпретация результатов. Наконец, результаты оценки интерпретируются для понимания сильных и слабых сторон модели и принятия решений о дальнейшей доработке или улучшениях.
Таким образом, оценка в XGBoost включает использование обученной модели для прогнозирования нового набора данных и оценку производительности модели с использованием различных показателей производительности.
Показатели оценки в XGBoost
Метрики оценки, используемые в XGBoost, зависят от типа решаемой проблемы. Вот некоторые из наиболее часто используемых показателей оценки в XGBoost для различных типов проблем:
- Проблемы регрессии:
- Среднеквадратическая ошибка (MSE)
- Среднеквадратичная ошибка (RMSE)
- Средняя абсолютная ошибка (MAE)
- R-квадрат
2. Проблемы с бинарной классификацией:
- Точность
- Точность
- Отзывать
- F1-счет
- Площадь под кривой рабочих характеристик приемника (AUC-ROC)
- Потеря журнала
3. Проблемы классификации нескольких классов:
- Точность
- Точность
- Отзывать
- F1-счет
- Потеря журнала
- Матрица путаницы
Важно отметить, что разные показатели оценки могут больше подходить для разных типов проблем, и часто необходимо использовать несколько показателей оценки, чтобы получить полное представление о производительности модели. Например, точность не всегда может быть лучшим показателем для несбалансированных наборов данных, в то время как AUC-ROC может быть лучшим показателем в таких случаях.
Плюсы и минусы XGBoost
Плюсы XGBoost:
- Масштабируемость: XGBoost может эффективно обрабатывать очень большие наборы данных.
- Скорость: XGBoost — один из самых быстрых доступных алгоритмов повышения градиента.
- Гибкость: XGBoost предоставляет широкий спектр возможностей для настройки модели и ее производительности.
- Надежность: XGBoost может эффективно обрабатывать пропущенные значения и зашумленные данные.
- Высокая точность: XGBoost обладает высокой точностью, особенно в задачах классификации и регрессии, и был использован для победы в нескольких соревнованиях по машинному обучению.
Минусы XGBoost:
- Сложность: XGBoost может быть сложным для понимания и реализации для начинающих, особенно когда речь идет о выборе и настройке гиперпараметров.
- Overfitting: XGBoost может переобучать данные, если они не настроены должным образом или если данные зашумлены.
- Использование памяти: XGBoost может интенсивно использовать память, особенно при работе с большими наборами данных.
- Длительное время обучения: обучение XGBoost может занять много времени, особенно когда используется большое количество деревьев или когда данные очень велики.
В целом, XGBoost — это мощный и широко используемый алгоритм машинного обучения, который хорошо подходит для крупномасштабных задач с данными. Его скорость и точность делают его популярным выбором для многих задач машинного обучения, но важно учитывать сложность и риск переобучения при принятии решения о том, является ли этот алгоритм лучшим для конкретного случая использования.