[Python] Глубоко в суть машинного обучения: XGBoost от начала до практики
[Python] Глубоко в суть машинного обучения: XGBoost от начала до практики

Полное руководство по обучению XGBoost: освоение повышения градиента с нуля

1. Предисловие

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

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

2. Что такое XGBoost?

2.1 Введение в повышение градиента

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

  • Boosting:проходить Объедините несколько слабых классификаторов, чтобы создать сильный классификатор.。
  • повышение градиента:использовать Информация о градиенте функции потерь для постепенной оптимизации Модель。

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


3. Установите XGBoost.

Сначала нам нужно установить XGBoost библиотека. может пройти pip Установить:

Язык кода:javascript
копировать
pip install xgboost

Если вы используете Jupyter Notebook,Можетпроходить Следующая команда Установить:

Язык кода:javascript
копировать
!pip install xgboost

После завершения установки используйте следующий код для проверки:

Язык кода:javascript
копировать
import xgboost as xgb
print(xgb.__version__)  # Отобразить номер версии Установить

Если номер версии выведен правильно, установка прошла успешно.


4. Подготовка данных

существоватьмашинное обучениесередина,Предварительная обработка данныхключевой。мы будемиспользоватьклассическийНабор данных Iris,Это многоклассовый набор данных для задач классификации.

4.1 Загрузка данных

проходить Scikit-learn Легко получить данные радужной оболочки глаза:

Язык кода:javascript
копировать
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

# Загрузить данные
iris = load_iris()
X, y = iris.data, iris.target

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

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

Язык кода:javascript
копировать
# Проверьте размер обучающего набора и тестового набора.
print(X_train.shape, X_test.shape)

5. Основные операции XGBoost

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

5.1 Конвертировать в формат DMatrix

Конвертируем обучающий и тестовый наборы в формат DMatrix:

Язык кода:javascript
копировать
# Преобразовать в DMatrix Формат
dtrain = xgb.DMatrix(X_train, label=y_train)
dtest = xgb.DMatrix(X_test)

DMatrix поддерживает разреженные матрицы, что может значительно повысить эффективность использования памяти для больших наборов данных.

5.2 Установка параметров

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

Язык кода:javascript
копировать
# Установить параметры
params = {
    'objective': 'multi:softmax',  # Проблема мультиклассификации
    'num_class': 3,  # Количество категорий
    'max_depth': 4,  # максимальная глубина дерева
    'eta': 0.3,  # скорость обучения
    'seed': 42
}
  • objective:функция потерь,Здесь мы выбираем мультиклассификацию softmax
  • num_class:количество категорий。
  • max_depth:максимальная глубина дерева,Более глубокие деревья более сложны.,Но легко переобучиться.
  • eta:скорость обучения,Используется для контроля влияния каждого дерева на конечную модель.
5.3 Обучение модели

проходить Следующий код Модель обучения:

Язык кода:javascript
копировать
# Модель обучения
num_round = 10  # Количество итераций
bst = xgb.train(params, dtrain, num_boost_round=num_round)
5.4 Прогноз

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

Язык кода:javascript
копировать
# предсказывать
preds = bst.predict(dtest)
print(preds)

Результатом в этот момент является прогнозируемая моделью категория для каждого образца.


6. Оценка модели

XGBoost Поддерживает несколько индикаторов оценки. мы можем использовать Scikit-learn предоставил accuracy_score оценить точность модели.

Язык кода:javascript
копировать
from sklearn.metrics import accuracy_score

# Точность расчета
accuracy = accuracy_score(y_test, preds)
print(f"Точность модели: {accuracy:.2f}")

Предположим, что результат:

Язык кода:javascript
копировать
Точность модели: 0,98

Точность 98% указывает на то, что модель очень хорошо работает с набором данных радужной оболочки глаза.


7. Настройка гиперпараметров

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

7.1 Часто используемые гиперпараметры
  • max_depth:глубина дерева,Влияет на сложность модели и риск переобучения.
  • learning_rate(или eta):скорость обучения,Контролируйте размер шага каждой итерации.
  • n_estimators:Увеличить количество деревьев,Это количество раундов обучения.
7.2 Поиск по сетке

мы используем GridSearchCV Чтобы настроить эти гиперпараметры:

Язык кода:javascript
копировать
from sklearn.model_selection import GridSearchCV
from xgboost import XGBClassifier

# Создать модель
model = XGBClassifier()

# Определить сетку параметров
param_grid = {
    'max_depth': [3, 4, 5],
    'n_estimators': [50, 100, 200],
    'learning_rate': [0.1, 0.3, 0.5]
}

# использоватьпоиск по сетке
grid_search = GridSearchCV(model, param_grid, scoring='accuracy', cv=3)
grid_search.fit(X_train, y_train)

# Вывод лучших параметров
print("Наилучшее сочетание параметров:", grid_search.best_params_)

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


8. Анализ важности функций XGBoost

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

Язык кода:javascript
копировать
# Важность функции графика
xgb.plot_importance(bst)
plt.show()

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


9. Расширение расширенных функций.

9.1 Объяснение и интерпретируемость модели

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

Установите и используйте SHAP:

Язык кода:javascript
копировать
pip install shap
Язык кода:javascript
копировать
import shap

# использовать SHAP Пояснение Модель
explainer = shap.TreeExplainer(bst)
shap_values = explainer.shap_values(dtest)

# Визуализация SHAP ценить
shap.summary_plot(shap_values, X_test)

На этой диаграмме показано, как каждая функция влияет на результат прогнозирования: красный цвет указывает на положительное влияние, а синий — на отрицательное.


9.2 XGBoost и перекрестная проверка

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

Язык кода:javascript
копировать
cv_results = xgb.cv(
    params, dtrain, num_boost_round=50, 
    nfold=5, metrics="mlogloss", as_pandas=True, seed=42
)

# Вывод результатов перекрестной проверки
print(cv_results)

проходить xgb.cv,Мы можем тренироваться несколько раз с разными комбинациями параметров.,Рассчитайте средний убытокценитьили Точность,Найти оптимальные гиперпараметры.


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

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

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

Язык кода:javascript
копировать
import numpy as np
# Предположим, что существуют NaN ценить
X_train[0, 0] = np.nan
dtrain = xgb.DMatrix(X_train, label=y_train)

10. Применение XGBoost в разных задачах

10.1 Задача возврата

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

Язык кода:javascript
копировать
params = {
    'objective': 'reg:squarederror',  # возвращение миссии
    'max_depth': 4,
    'eta': 0.1,
}

# Загрузить образцы данных (например, предсказать цены на жилье)
from sklearn.datasets import load_boston
X, y = load_boston(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

dtrain = xgb.DMatrix(X_train, label=y_train)
dtest = xgb.DMatrix(X_test)

# Модель обучающей регрессии
bst = xgb.train(params, dtrain,num_boost_round=100)

# руководитьпредсказывать
preds = bst.predict(dtest)
print(preds)
10.2 Две задачи классификации

Для задачи бинарной классификации мы можем установить целевую функцию как binary:logistic,выходпредсказыватьценитьэто вероятность。

Язык кода:javascript
копировать
params = {
    'objective': 'binary:logistic',
    'max_depth': 4,
    'eta': 0.3,
}

# Предположим, у нас есть набор данных двоичной классификации.
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=1000, n_features=20, n_classes=2)

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
dtrain = xgb.DMatrix(X_train, label=y_train)
dtest = xgb.DMatrix(X_test)

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

# руководитьпредсказывать
preds = bst.predict(dtest)

11. Распределенное обучение

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

XGBoost проходить Rabit Фреймворк осуществляет связь между узлами и поддерживает передачу Spark、Dask и другие структуры для реализации распределенного обучения. Вы можете использовать его для крупномасштабных наборов данных. XGBoost Тренируйтесь эффективно.


12. Практический пример: конкуренция XGBoost и Kaggle

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

Язык кода:javascript
копировать
import pandas as pd

# Загрузка данных Титаника
train = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')

# Предварительная обработка данных
train['Age'].fillna(train['Age'].mean(), inplace=True)
train['Embarked'].fillna('S', inplace=True)
train['Fare'].fillna(train['Fare'].mean(), inplace=True)

# Обработка объектов
train['Sex'] = train['Sex'].map({'male': 0, 'female': 1})
train['Embarked'] = train['Embarked'].map({'S': 0, 'C': 1, 'Q': 2})

# Характеристики и этикетки
X_train = train[['Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare', 'Embarked']]
y_train = train['Survived']

dtrain = xgb.DMatrix(X_train, label=y_train)

# Установить параметры
params = {
    'objective': 'binary:logistic',
    'max_depth': 3,
    'eta': 0.1,
    'eval_metric': 'logloss'
}

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

# Проведение предсказывать на тестовом наборе
dtest = xgb.DMatrix(test[['Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare', 'Embarked']])
preds = bst.predict(dtest)

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

Подвести итог

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

Выше речь идет о [Python] Глубоко в суть машинного обучения: XGBoost от начала до практикисодержание,Если у вас есть какие-либо вопросы, пожалуйста, не стесняйтесь исправлять их в области комментариев.,Или вы можете отправить мне личное сообщение.,Ваша поддержка – самая большая мотивация для моего творчества! ❤️

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