[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
Учебное пособие по 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 и детали кода