Привет, я Джонго~
В это время многие люди говорят о некоторых базовых моделях алгоритмов.
Сегодня мы поделимся популярным алгоритмом XGBoost! !
Сегодняшний контент очень подробный! Если вам нужен PDF-файл этой статьи, не забудьте скачать его в конце статьи~
XGBoost, полное имя eXtreme Gradient Boosting,это оптимизированная распределенная библиотека повышения градиента,Разработан для эффективного, гибкого и портативного машинного обучения. Модель.
Основная идея XGBoost — это алгоритм повышения, основанный на деревьях решений градиентного повышения (GBDT), который повышает производительность прогнозирования за счет постепенного построения серии слабых учеников (обычно деревьев решений) и объединения их в сильного ученика.
Предложен и разработан Тяньци Ченом в 2014 году.
Основная цель заключалась в решении проблем эффективности и производительности, существовавших в то время в машинном обучении.
XGBoost добился значительного улучшения скорости и производительности благодаря множеству технических усовершенствований, в том числе:
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 создает мощную прогнозирующую модель путем интеграции нескольких слабых обучающихся (обычно деревьев решений).
Основная идея повышения градиента
Повышение градиента — это метод ансамблевого обучения, который формирует сильного обучающегося путем итеративного обучения нескольких слабых обучающихся и взвешивания результатов их прогнозирования. Цель каждого раунда обучения — уменьшить остаточную ошибку предыдущего раунда прогнозирования.
Предположим, у нас есть набор обучающих данных
,в
это входная функция,
является целевым значением. Наша цель — изучить модель
, делая прогнозируемое значение
как можно ближе к истинному значению
。
В рамках системы повышения градиента глава
модель колеса
Это впереди
На основе модели колеса добавлен новый слабый обучающийся
:
Для оптимизации модели минимизируем функцию потерь
, например квадратичная ошибка:
Целевая функция XGBoost
XGBoost расширяет базовый алгоритм повышения градиента, и цель его оптимизации состоит из следующих двух частей:
, используется для управления сложностью модели
Форма целевой функции следующая:
Среди них термин регуляризации
Обычно определяется как:
здесь,
количество конечных узлов дерева,
- вес листового узла,
и
– параметр регуляризации.
Расширение Тейлора второго порядка
Для того, чтобы эффективно оптимизировать целевую функция,XGBoostиспользовать Расширение Тейлора второго порядок приближенной функции потерь. Предположим, что в В раунде наше прогнозируемое значение равно \hat{y}i^{(t)} = F{t-1}(x_i) + h_t(x_i) . Целевую функцию можно записать как:
Используя расширение Тейлора, функцию потерь можно расширить как:
в:
Целевая функция становится:
Для каждого дерева прогнозируемое значение листового узла является константой.
, структура дерева
, указывая образец
Листовой узел, которому он принадлежит.
Таким образом, модель может быть выражена как:
Подключите это к целевой функции и просуммируйте по каждому листовому узлу:
Путем вывода можно получить оптимальный вес каждого листового узла:
Подставьте оптимальные веса в целевую функцию, чтобы получить оптимизированную целевую функцию:
строительство деревьев
Присоединяйтесь к модели.
:
。
и
。
Целое можно увидеть,XGBoost улучшается благодаря ряду технологий,нравитьсярегуляризацияэлемент、二阶导数изиспользовать、Параллельные вычисления и т. д.,实现了在计算эффективностьипредсказыватьпроизводительность上из显著提升。Эти характеристики делаютXGBoostВо многих соревнованиях по машинному обучениюи Отличные характеристики в практическом применении。
Проблемы с приложением XGBoost
XGBoost подходит для многих типов задач машинного обучения, особенно в задачах классификации и регрессии.
Плюсы и минусы XGBoost
преимущество:
недостаток:
Ниже мы используем набор данных по жилищному строительству Калифорнии, чтобы продемонстрировать полный процесс регрессионного анализа XGBoost.
весь процесс,включатьданныенагрузка、предварительная обработка、Модельное обучение、предсказывать、Визуализация и алгоритм Оптимизация~
Установите необходимые библиотеки
pip install xgboost scikit-learn matplotlib seaborn pandas
Библиотеки необходимы после импорта
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
Загрузка и подготовка данных
# Загрузка набора данных о ценах на жилье в Калифорнии
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)
Модельное обучение
# создавать 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)
Оценка эффективности
# Оцените производительность модели
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}')
Визуальный дисплей
# 可视化真实ценитьипредсказыватьценить
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()
# Важность функции
xgb.plot_importance(model)
plt.title('Feature Importance')
plt.show()
Оптимизация модели
# использовать 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 параметров,может быть улучшено Модельизпроизводительность。可视化部分включать实际ценитьипредсказыватьценитьиз散点图,а также Важность Диаграмма функций может помочь каждому лучше понять важность производительности и характеристик модели.