Супер полное описание алгоритма XGBoost! !
Супер полное описание алгоритма XGBoost! !

Привет, я Джонго~

В это время многие люди говорят о некоторых базовых моделях алгоритмов.

Сегодня мы поделимся популярным алгоритмом XGBoost! !

Сегодняшний контент очень подробный! Если вам нужен PDF-файл этой статьи, не забудьте скачать его в конце статьи~

XGBoost, полное имя eXtreme Gradient Boosting,это оптимизированная распределенная библиотека повышения градиента,Разработан для эффективного, гибкого и портативного машинного обучения. Модель.

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

историческая справка

Предложен и разработан Тяньци Ченом в 2014 году.

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

XGBoost добился значительного улучшения скорости и производительности благодаря множеству технических усовершенствований, в том числе:

  1. регуляризация:путем спаривания Модельсложностьрегуляризацияиметь дело с,Предотвратите переоснащение.
  2. параллельная обработка:Путем параллельных вычислений в распределенной среде,Улучшена скорость Модельного обучения.
  3. Алгоритм обрезки деревьев:использоватьжадный алгоритм выполняет обрезку, чтобы гарантировать оптимальность сгенерированного дерева.
  4. Блочная структура с поддержкой кэша:путем оптимизацииданныехранилищеи Метод доступа,Увеличение памятииспользоватьэффективность。

Источник бумаги

XGBoostПодробное введениеи Техническая реализация была впервые опубликована в2016Статья под названием“XGBoost: A Scalable Tree Boosting System”в газете。Среди авторов статьи Чэнь Тяньци.(Tianqi Чен и Карлос Гослин Guestrin)。

Цитаты на бумаге

Эта статья была опубликована на конференции KDD 2016 (Knowledge Discovery and Data Mining), которая является очень важной конференцией в области машинного обучения и интеллектуального анализа данных.

Полная цитата из статьи:

Chen, T., & Guestrin, C. (2016). XGBoost: A Scalable Tree Boosting System. Proceedings of the 22nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (KDD '16), 785–794. DOI: https://dl.acm.org/doi/10.1145/2939672.2939785

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

Теоретическая основа

Математические принципы XGBoost

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

Основная идея повышения градиента

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

Предположим, у нас есть набор обучающих данных

{(x_i, y_i)}_{i=1}^n

x_i

это входная функция,

y_i

является целевым значением. Наша цель — изучить модель

F(x)

, делая прогнозируемое значение

\hat{y}_i = F(x_i)

как можно ближе к истинному значению

y_i

В рамках системы повышения градиента глава

t

модель колеса

F_t(x)

Это впереди

t-1

На основе модели колеса добавлен новый слабый обучающийся

h_t(x)

F_t(x) = F_{t-1}(x) + h_t(x)

Для оптимизации модели минимизируем функцию потерь

L(y, \hat{y})

, например квадратичная ошибка:

L(y, \hat{y}) = \frac{1}{2} (y - \hat{y})^2

Целевая функция XGBoost

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

  1. Функция потерь
L
  1. регуляризацияэлемент
\Omega

, используется для управления сложностью модели

Форма целевой функции следующая:

\mathcal{L} = \sum_{i=1}^n L(y_i, \hat{y}_i) + \sum_{k=1}^T \Omega(h_k)

Среди них термин регуляризации

\Omega

Обычно определяется как:

\Omega(h) = \gamma T + \frac{1}{2} \lambda \sum_{j=1}^T w_j^2

здесь,

T

количество конечных узлов дерева,

w_j

- вес листового узла,

\gamma

и

\lambda

– параметр регуляризации.

Расширение Тейлора второго порядка

Для того, чтобы эффективно оптимизировать целевую функция,XGBoostиспользовать Расширение Тейлора второго порядок приближенной функции потерь. Предположим, что в В раунде наше прогнозируемое значение равно \hat{y}i^{(t)} = F{t-1}(x_i) + h_t(x_i) . Целевую функцию можно записать как:

\mathcal{L}^{(t)} = \sum_{i=1}^n L(y_i, \hat{y}_i^{(t)}) + \Omega(h_t)

Используя расширение Тейлора, функцию потерь можно расширить как:

\mathcal{L}^{(t)} \approx \sum_{i=1}^n \left[ L(y_i, \hat{y}_i^{(t-1)}) + g_i h_t(x_i) + \frac{1}{2} h_t(x_i)^2 h_i \right] + \Omega(h_t)

в:

g_i = \frac{\partial L(y_i, \hat{y}_i^{(t-1)})}{\partial \hat{y}_i^{(t-1)}} \\ h_i = \frac{\partial^2 L(y_i, \hat{y}_i^{(t-1)})}{\partial (\hat{y}_i^{(t-1)})^2}

Целевая функция становится:

\mathcal{L}^{(t)} = \sum_{i=1}^n \left[ g_i h_t(x_i) + \frac{1}{2} h_i h_t(x_i)^2 \right] + \Omega(h_t)

Для каждого дерева прогнозируемое значение листового узла является константой.

w_j

, структура дерева

q(x)

, указывая образец

x

Листовой узел, которому он принадлежит.

Таким образом, модель может быть выражена как:

h_t(x) = w_{q(x)}

Подключите это к целевой функции и просуммируйте по каждому листовому узлу:

\mathcal{L}^{(t)} = \sum_{j=1}^T \left[ \left( \sum_{i \in I_j} g_i \right) w_j + \frac{1}{2} \left( \sum_{i \in I_j} h_i + \lambda \right) w_j^2 \right] + \gamma T

Путем вывода можно получить оптимальный вес каждого листового узла:

w_j^* = -\frac{\sum_{i \in I_j} g_i}{\sum_{i \in I_j} h_i + \lambda}

Подставьте оптимальные веса в целевую функцию, чтобы получить оптимизированную целевую функцию:

\mathcal{L}^{(t)} = -\frac{1}{2} \sum_{j=1}^T \frac{(\sum_{i \in I_j} g_i)^2}{\sum_{i \in I_j} h_i + \lambda} + \gamma T

строительство деревьев

  1. Разделить баллы кандидатов:Рассчитайте выигрыш от всех возможных точек разделения для всех функций.,Выберите точку разделения с наибольшим усилением.
  2. жадный алгоритм:использоватьжадный алгоритмруководитьстроительство объектов, выберите объект и точку разделения с наибольшим коэффициентом разделения.
  3. обрезка:минимизируяцелевая Функция, позволяющая решить, сохранять ли текущее разделение.

Процесс алгоритма XGBoost

  1. Инициализировать модель
    • Установите начальное прогнозируемое значение на константу, обычно среднее целевого значения.
  2. итеративное обучение
    • Рассчитайте выигрыш для каждой точки разделения-кандидата.
    • Жадно выбирает оптимальную точку разделения до тех пор, пока не будет достигнута максимальная глубина или другое условие остановки.
    • Установите веса конечных узлов нового дерева
    w_j^*

    Присоединяйтесь к модели.

    • за каждый раунд
    t

    1. Рассчитать ток Модельизпредсказыватьценить
    \hat{y}_i^{(t-1)}

    1. Вычислить первую и вторую производные
    g_i

    и

    h_i

    1. Построить новое дерево, свернуть целевую функция:
    2. возобновлять Модель:
  3. Выходные данные модели
    • Финальная модель состоит из деревьев со всех раундов.,предсказывать时将所有树изпредсказыватьценить加权求и。

Целое можно увидеть,XGBoost улучшается благодаря ряду технологий,нравитьсярегуляризацияэлемент、二阶导数изиспользовать、Параллельные вычисления и т. д.,实现了在计算эффективностьипредсказыватьпроизводительность上из显著提升。Эти характеристики делаютXGBoostВо многих соревнованиях по машинному обучениюи Отличные характеристики в практическом применении。

Сценарии применения

Проблемы с приложением XGBoost

XGBoost подходит для многих типов задач машинного обучения, особенно в задачах классификации и регрессии.

  1. структурированные данные:XGBoost在иметь дело сструктурированные Он хорошо работает с данными (например, табличными данными) и может обрабатывать большое количество функций и образцов.
  2. Высокоразмерные данные:XGBoost能够有效地иметь дело с Высокоразмерные данных, не требует чрезмерной разработки функций.
  3. крупномасштабные данные:XGBoostиметьпараллельная обработки Функции, оптимизирующие использование памяти, подходящие для крупномасштабной обработки. данныенабор。
  4. Высокие требования к точности:XGBoostОтличные характеристики с точки зрения точности,通常能够获得较高изпредсказыватьпроизводительность。

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

преимущество

  1. Высокая точность:XGBoostво многихданныенабор上都能够获得很高изпредсказыватьточность。
  2. Масштабируемость:XGBoostиметьпараллельная способность обработки эффективно обрабатывать крупномасштабные данные。
  3. гибкость:XGBoostПоддержка нескольких Функция потерьирегуляризацияметод,Возможна корректировка в зависимости от конкретных задач.
  4. Важность функции:XGBoost可以自动计算特征из重要性,Помогите разобраться в данных.

недостаток

  1. Настройка параметров:XGBoostЕсть много параметров, которые необходимо настроить.,Неправильные настройки параметров могут привести к переоснащению или недостаточному оснащению.
  2. Требования к вычислительным ресурсам:XGBoostна тренировкеипредсказывать时需要较多из计算资源。
  3. Не очень хорошо справляется с текстовыми данными.:относительно другихалгоритм(нравиться深度学习Модель),XGBoost не очень хорошо справляется с обработкой текстовых данных.

Случай с Python

Ниже мы используем набор данных по жилищному строительству Калифорнии, чтобы продемонстрировать полный процесс регрессионного анализа XGBoost.

весь процесс,включатьданныенагрузка、предварительная обработка、Модельное обучение、предсказывать、Визуализация и алгоритм Оптимизация~

Установите необходимые библиотеки

Язык кода:javascript
копировать
pip install xgboost scikit-learn matplotlib seaborn pandas

Библиотеки необходимы после импорта

Язык кода:javascript
копировать
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.metrics import mean_squared_error, r2_score
import xgboost as xgb

Загрузка и подготовка данных

Язык кода:javascript
копировать
# Загрузка набора данных о ценах на жилье в Калифорнии
california = fetch_california_housing()
X = pd.DataFrame(california.data, columns=california.feature_names)
y = pd.Series(california.target, name='MedHouseVal')

# Разделите набор данных на обучающий набор и тестовый набор.
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

print(X_train.shape, X_test.shape)

Модельное обучение

Язык кода:javascript
копировать
# создавать DMatrix данные结构
dtrain = xgb.DMatrix(X_train, label=y_train)
dtest = xgb.DMatrix(X_test, label=y_test)

# Установить параметры
params = {
    'objective': 'reg:squarederror',
    'max_depth': 4,
    'eta': 0.1,
    'subsample': 0.8,
    'colsample_bytree': 0.8,
    'seed': 42
}

# Модель обучения
model = xgb.train(params, dtrain, num_boost_round=100)

# предсказывать
y_pred = model.predict(dtest)

Оценка эффективности

Язык кода:javascript
копировать
# Оцените производительность модели
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

print(f'Mean Squared Error: {mse}')
print(f'R^2 Score: {r2}')

Визуальный дисплей

Язык кода:javascript
копировать
# 可视化真实ценитьипредсказыватьценить
plt.figure(figsize=(10, 6))
plt.scatter(y_test, y_pred, alpha=0.7)
plt.plot([min(y_test), max(y_test)], [min(y_test), max(y_test)], color='red', linestyle='--')
plt.xlabel('Actual MedHouseVal')
plt.ylabel('Predicted MedHouseVal')
plt.title('Actual vs Predicted MedHouseVal')
plt.show()
Язык кода:javascript
копировать
# Важность функции
xgb.plot_importance(model)
plt.title('Feature Importance')
plt.show()

Оптимизация модели

Язык кода:javascript
копировать
# использовать GridSearchCV руководить Настройка параметров
param_grid = {
    'max_depth': [3, 4, 5],
    'eta': [0.01, 0.1, 0.2],
    'subsample': [0.6, 0.8, 1.0],
    'colsample_bytree': [0.6, 0.8, 1.0]
}

grid_search = GridSearchCV(estimator=xgb.XGBRegressor(objective='reg:squarederror', seed=42), 
                           param_grid=param_grid, 
                           scoring='neg_mean_squared_error', 
                           cv=3, 
                           verbose=1)

grid_search.fit(X_train, y_train)

print(f'Best parameters found: {grid_search.best_params_}')

# использоватьлучшие параметры Модель обучения
best_params = grid_search.best_params_
model_optimized = xgb.train(best_params, dtrain, num_boost_round=100)

# предсказывать
y_pred_optimized = model_optimized.predict(dtest)

# Оцените производительность оптимизированной модели
mse_optimized = mean_squared_error(y_test, y_pred_optimized)
r2_optimized = r2_score(y_test, y_pred_optimized)

print(f'Optimized Mean Squared Error: {mse_optimized}')
print(f'Optimized R^2 Score: {r2_optimized}')

Весь код демонстрирует полный процесс регрессионного анализа XGBoost с использованием набора данных о ценах на жилье в Калифорнии.

Супер настройка от GridSearchCV параметров,может быть улучшено Модельизпроизводительность。可视化部分включать实际ценитьипредсказыватьценитьиз散点图,а также Важность Диаграмма функций может помочь каждому лучше понять важность производительности и характеристик модели.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose