Экстремальный градиентный бустинг (XGBoost) - Лена Капаца
Экстремальный градиентный бустинг (XGBoost) by Лена Капаца Feb. 18, 2023 Основы

XGBoost — это opensource-библиотека, обеспечивающая высокопроизводительную реализацию Деревьев решений (Decision Tree).

В этой статье узнаем, как работает Градиентный бустинг (GB), а затем рассмотрим пример на Python.

В обычном Машинном обучении (ML), таком как дерево решений, мы просто обучаем Модель (Model) на наборе данных и используем ее для прогнозирования:

Дерево решений – выдача кредита

Мы можем немного поэкспериментировать с параметрами или дополнить данные, но в итоге мы по-прежнему используем ту же модель. Даже если мы строим Ансамбль (Ensemble) – комбинацию моделей, все модели обучаются по отдельности.

Бустинг же использует итеративный подход: технически это по-прежнему ансамбль, но при этом каждая новая модель обучается исправлять ошибки, допущенные предыдущими. Модели добавляются последовательно до тех пор, пока дальнейшие улучшения не станут невозможными.

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

Давайте посмотрим на XGBoost в деле. Для начала установим импортируем ее и другие необходимые библиотеки:

!pip install xgboost
from sklearn import datasets
import xgboost as xgb
from sklearn.model_selection import train_test_split
import numpy as np
from sklearn.metrics import precision_score, recall_score, accuracy_score

Мы будем использовать известный Датасет (Dataset) цветов ириса:

Виды ирисов и характеристики их цветков
iris = datasets.load_iris()
X = iris.data
y = iris.target

Целевая переменная (Target Variable) y – это числовое обозначение одного из трех видов ириса – Setosa (0), Versicolor (1) или Virginica (2). Разделим набор на Тренировочные (Train Data) и Тестовые данные (Test Data), чтобы проверить качество обучения XGBoost. Тестовые данные составят 20% (0.2):

X_train, X_test, Y_train, Y_test = train_test_split(X, y, test_size=0.2)

Чтобы XGBoost мог использовать наши данные, нам нужно преобразовать их в определенный формат – DMatrix:

D_train = xgb.DMatrix(X_train, label=Y_train)
D_test = xgb.DMatrix(X_test, label=Y_test)

Теперь мы можем определить параметры нашего ансамбля:

param = {
    'eta': 0.3, 
    'max_depth': 3,  
    'objective': 'multi:softprob',  
    'num_class': 3} 

steps = 20

Самыми простыми параметрами являются:

steps – количество этапов обучения. eta же требует особого внимания.

Согласно нашей теории, Gradient Boosting включает в себя последовательное создание и добавление деревьев решений. Новые деревья создаются для исправления остаточных ошибок.

Из-за характера ансамбля, т. е. нескольких моделей, объединенных в одну очень большую сложную модель, этот метод подвержен Переобучению (Overfitting). eta дает нам шанс предотвратить это.

Недо-, пере- и сбалансированное обучения

eta похожа на скорость обучения: вместо того, чтобы просто добавлять прогнозы новых деревьев в ансамбль, ансабль будет учитывать ошибки предыдущих деревьев, то есть назначать Веса (Weights) до 0,3.

Наконец-то мы можем обучить нашу модель:

model = xgb.train(param, D_train, steps)

Давайте теперь проведем оценку:

preds = model.predict(D_test)
best_preds = np.asarray([np.argmax(line) for line in preds])

print("Точность результата измерений (Precision): {}".format(precision_score(Y_test, best_preds, average='macro')))
print("Отзыв (Recall): {}".format(recall_score(Y_test, best_preds, average='macro')))
print("Точность измерений (Accuracy): {}".format(accuracy_score(Y_test, best_preds)))

Мы получили довольно высокие показатели, в реальном мире эффективные на 97%+ модели встречаются редко:

Точность результата измерений (Precision): 0.9722222222222222
Отзыв (Recall): 0.9629629629629629
Точность измерений (Accuracy): 0.9666666666666667

Автор оригинальной статьи: George Seif

Ноутбук, не требующий дополнительной настройки на момент написания статьи, можно скачать здесь.

Подари чашку кофе дата-сайентисту ↑

© Лена Капаца. Все права защищены.