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

Повышение также является методом ансамбля, который объединяет множество моделей для получения окончательного результата, но вместо того, чтобы оценивать все модели по отдельности, повышает модели поездов последовательно. это означает, что каждая новая модель обучается исправлять ошибку предыдущей модели, и последовательность останавливается, когда нет дальнейшего улучшения. Именно поэтому он более точен.

Установка XGBoost

Подробное руководство по установке есть на веб-сайте документации XGBoost.

Он охватывает установку для Linux, Mac OS X и Windows.

Он также охватывает установку на таких платформах, как R и Python.

Настройка наших данных

Итак, первым делом нужно подготовить данные для нашей модели. мы собираемся использовать набор данных цветов ириса из Scikit Learn.

Здесь мы загрузили набор данных из Sklearn в python, а также импортировали библиотеку XGBoost.

from sklearn import datasets
import xgboost as xgb

iris = datasets.load_iris()
X = iris.data
y = iris.target

Далее мы должны разделить наш набор данных на две части: обучающие и тестовые данные. Это важный шаг, чтобы увидеть, насколько хорошо работает наша модель. Итак, мы собираемся разделить наши данные на части 80%-20%.

from sklearn.model_selection import train_test_split

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

В отличие от остальных алгоритмов, XGBoost требует, чтобы наши данные были преобразованы в определенный формат, например DMatrix.

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

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

Теперь у нас есть наши пустые массивы данных, преобразованные в формат DMatix для подачи нашей модели. Но перед этим нам нужно определить нашу модель.

Определить модель XGBoost

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

param = {
    'eta': 0.2, 
    'max_depth': 4,  
    'objective': 'multi:softprob',  
    'num_class': 4
    }

epochs = 20

so here are our parameters:

  • max_depth: maximum depth of the decision trees being trained
  • objective: the loss function is used
  • num_class: the number of classes in the dataset
  • eta: the learning rate

As we already know, this kind of model worked in a sequential way, which make it more complex. this technique is very prone to overfitting.

The eta parameter/ learning rate helps our algorithm to prevent overfitting by not just adding the prediction of new trees to the ensemble with full weight but the eta will be multiplied by the residual being adding to reduce their weights.

Note: It is advised to have small values of eta in the range of 0.1 to 0.3

we have our model defined now , lets train it

Training and Testing

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

Это очень похоже на процесс Scikit Learn, и выполнение оценки также очень знакомо.

import numpy as np
from sklearn.metrics import precision_score, recall_score, accuracy_score

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)))

вывод:

Отлично, мы добились точности выше 90%

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

Итак, вопрос здесь: как выбрать правильные параметры?

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

Поиск оптимальных параметров

Установка оптимальных гиперпараметров любой модели машинного обучения может оказаться непростой задачей. Так почему бы не позволить Scikit Learn сделать это за вас? Мы можем довольно легко объединить поиск по сетке Scikit Learn с классификатором XGBoost:

from sklearn.model_selection import GridSearchCV

clf = xgb.XGBClassifier()
parameters = {
     "eta"    : [0.05, 0.10, 0.15, 0.20, 0.25, 0.30 ] ,
     "max_depth"        : [ 3, 4, 5, 6, 8, 10, 12, 15],
     "min_child_weight" : [ 1, 3, 5, 7 ],
     "gamma"            : [ 0.0, 0.1, 0.2 , 0.3, 0.4 ],
     "colsample_bytree" : [ 0.3, 0.4, 0.5 , 0.7 ]
     }

grid = GridSearchCV(clf,
                    parameters, n_jobs=4,
                    scoring="neg_log_loss",
                    cv=3)

grid.fit(X_train, Y_train)

вывод:

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

После того, как ваша модель XGBoost обучена, вы можете вывести ее удобочитаемое описание в текстовый файл:

model.dump_model('dump.raw.txt')

Вот как мы можем создать модель XGBoost и выбрать для нее идеальные гиперпараметры.

Оставайтесь с нами, приятного обучения :-)

Следите за MachineX Intelligence, чтобы узнать больше: