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
Самыми простыми параметрами являются:
max_depth
: максимальная глубина обучаемых деревьев решенийobjective: 'multi:softprob'
: каждому наблюдению присваивается определенная вероятность принадлежности к каждому классу.num_class
: количество классов в наборе данных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
Ноутбук, не требующий дополнительной настройки на момент написания статьи, можно скачать здесь.
Подари чашку кофе дата-сайентисту ↑
© Лена Капаца. Все права защищены.