существоватьмашинное обучениесередина,XGBoost Это реализация дерева решений (GBDT), основанная на повышении градиента. Благодаря своей превосходной производительности и скорости она широко используется в таких задачах, как классификация и регрессия. Разработчики отдают предпочтение XGBoost, особенно на соревнованиях Kaggle, за его высокую производительность.
В этой статье вы познакомитесь с установкой, основными понятиями и настройкой модели, чтобы полностью освоить использование XGBoost.
XGBoost — это оптимизированная версия, основанная на системе повышения градиента. Повышение градиента — это итеративный ансамблевый алгоритм, который постоянно строит новые деревья, чтобы дополнить ошибки предыдущих моделей. Он основан на эффекте интеграции нескольких деревьев решений для улучшения прогнозирующей способности окончательной модели.
XGBoost обеспечивает оптимизацию эффективности использования памяти, скорости вычислений и распараллеливания и является инструментом, очень подходящим для больших данных и многомерных наборов данных.
Сначала нам нужно установить XGBoost библиотека. может пройти pip
Установить:
pip install xgboost
Если вы используете Jupyter Notebook,Можетпроходить Следующая команда Установить:
!pip install xgboost
После завершения установки используйте следующий код для проверки:
import xgboost as xgb
print(xgb.__version__) # Отобразить номер версии Установить
Если номер версии выведен правильно, установка прошла успешно.
существоватьмашинное обучениесередина,Предварительная обработка данныхключевой。мы будемиспользоватьклассическийНабор данных Iris,Это многоклассовый набор данных для задач классификации.
проходить Scikit-learn Легко получить данные радужной оболочки глаза:
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)
Чтобы оценить производительность модели, мы делим набор данных на обучающий набор и тестовый набор. Обучающий набор используется для обучения модели, а тестовый набор используется для оценки производительности.
# Проверьте размер обучающего набора и тестового набора.
print(X_train.shape, X_test.shape)
XGBoost Основная структура данных DMatrix
,Оптимизирован внутренний формат данных.,Имеет более высокую память и вычислительную эффективность.
Конвертируем обучающий и тестовый наборы в формат DMatrix:
# Преобразовать в DMatrix Формат
dtrain = xgb.DMatrix(X_train, label=y_train)
dtest = xgb.DMatrix(X_test)
DMatrix поддерживает разреженные матрицы, что может значительно повысить эффективность использования памяти для больших наборов данных.
XGBoost предоставляет большое количество гиперпараметров, которые можно настроить. Начнем с некоторых основных параметров:
# Установить параметры
params = {
'objective': 'multi:softmax', # Проблема мультиклассификации
'num_class': 3, # Количество категорий
'max_depth': 4, # максимальная глубина дерева
'eta': 0.3, # скорость обучения
'seed': 42
}
softmax
。проходить Следующий код Модель обучения:
# Модель обучения
num_round = 10 # Количество итераций
bst = xgb.train(params, dtrain, num_boost_round=num_round)
После завершения обучения мы можем использовать тестовый набор для прогнозирования:
# предсказывать
preds = bst.predict(dtest)
print(preds)
Результатом в этот момент является прогнозируемая моделью категория для каждого образца.
XGBoost Поддерживает несколько индикаторов оценки. мы можем использовать Scikit-learn
предоставил accuracy_score
оценить точность модели.
from sklearn.metrics import accuracy_score
# Точность расчета
accuracy = accuracy_score(y_test, preds)
print(f"Точность модели: {accuracy:.2f}")
Предположим, что результат:
Точность модели: 0,98
Точность 98% указывает на то, что модель очень хорошо работает с набором данных радужной оболочки глаза.
XGBoost Предоставляет множество гиперпараметров, а правильная настройка может значительно улучшить производительность модели. мы можем использовать GridSearchCV
Выполните поиск по гиперпараметру.
max_depth
:глубина дерева,Влияет на сложность модели и риск переобучения.learning_rate
(или eta
):скорость обучения,Контролируйте размер шага каждой итерации.n_estimators
:Увеличить количество деревьев,Это количество раундов обучения.мы используем GridSearchCV
Чтобы настроить эти гиперпараметры:
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_)
Поиск по сетке автоматически пробует различные комбинации параметров и, наконец, возвращает оптимальную комбинацию.
XGBoost предоставляет встроенные методы для анализа важности функций. Это помогает понять, какие функции оказывают наибольшее влияние на модель.
# Важность функции графика
xgb.plot_importance(bst)
plt.show()
Карта важности функций покажет влияние каждой функции на модель, помогая разработчикам дополнительно оптимизировать модель.
Для приложений в производственных средах интерпретация прогнозов модели имеет решающее значение. Вы можете использовать SHAP (аддитивные объяснения SHapley) для интерпретации прогнозов моделей XGBoost. Это помогает нам понять влияние функций на результаты прогнозирования.
Установите и используйте SHAP:
pip install shap
import shap
# использовать SHAP Пояснение Модель
explainer = shap.TreeExplainer(bst)
shap_values = explainer.shap_values(dtest)
# Визуализация SHAP ценить
shap.summary_plot(shap_values, X_test)
На этой диаграмме показано, как каждая функция влияет на результат прогнозирования: красный цвет указывает на положительное влияние, а синий — на отрицательное.
Перекрестная проверка (CV) — это распространенный метод оценки, используемый для снижения риска переобучения. XGBoost предоставляет встроенную функцию перекрестной проверки:
cv_results = xgb.cv(
params, dtrain, num_boost_round=50,
nfold=5, metrics="mlogloss", as_pandas=True, seed=42
)
# Вывод результатов перекрестной проверки
print(cv_results)
проходить xgb.cv
,Мы можем тренироваться несколько раз с разными комбинациями параметров.,Рассчитайте средний убытокценитьили Точность,Найти оптимальные гиперпараметры.
XGBoost обладает мощной способностью обрабатывать пропущенные значения. Он автоматически обрабатывает пропущенные значения в данных во время процесса обучения и выбирает оптимальный метод разделения. Это делает его очень подходящим для использования с реальными наборами данных, содержащими пропущенные значения.
Например, если в данных есть пропущенные значения, XGBoost не требует ручного заполнения:
import numpy as np
# Предположим, что существуют NaN ценить
X_train[0, 0] = np.nan
dtrain = xgb.DMatrix(X_train, label=y_train)
XGBoost Подходит не только для задач классификации, но и для задач регрессии. В задаче регрессии целевую функцию можно задать как reg:squarederror
,Вот наиболее распространенные цели регрессии:
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)
Для задачи бинарной классификации мы можем установить целевую функцию как binary:logistic
,выходпредсказыватьценитьэто вероятность。
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)
XGBoost поддерживает распределенное обучение на нескольких машинах и нескольких графических процессорах, что обеспечивает высокую масштабируемость для крупномасштабных наборов данных. Чтобы включить распределенное обучение, сначала необходимо настроить кластер и настроить соответствующие параметры.
XGBoost проходить Rabit
Фреймворк осуществляет связь между узлами и поддерживает передачу Spark、Dask и другие структуры для реализации распределенного обучения. Вы можете использовать его для крупномасштабных наборов данных. XGBoost Тренируйтесь эффективно.
XGBoost добился отличных результатов на многих соревнованиях Kaggle. Ниже приведен практический пример: мы будем использовать набор данных для прогнозирования выживаемости пассажиров «Титаника» для проведения полного обучения и оценки модели.
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 от начала до практикисодержание,Если у вас есть какие-либо вопросы, пожалуйста, не стесняйтесь исправлять их в области комментариев.,Или вы можете отправить мне личное сообщение.,Ваша поддержка – самая большая мотивация для моего творчества! ❤️