Супер полное описание алгоритма 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
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода