XGBoost: введение

Когда дело доходит до сверхбыстрого алгоритма машинного обучения, который работает с древовидными моделями и пытается достичь наилучшей в своем классе точности за счет оптимального использования вычислительных ресурсов, XGBoost или Extreme Gradient Boosting становятся наиболее естественным выбором. Создано Тяньци Ченом; Алгоритм XGBoost в последнее время приобрел такую ​​популярность благодаря его массовому использованию в большинстве хакатонов и соревнований Kaggle.

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

Алгоритм повышения: обучение ансамблю

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

Вообще говоря, может быть два типа ансамблевого обучения.

а. Бэггинг. Этот метод, также известный как агрегация Bootstrap, создает случайные выборки из основных данных, а затем разрабатывает параллельные модели для каждого набора данных. Окончательный прогноз делается путем объединения выходных данных каждой отдельной модели. Классическим примером алгоритма бэггинга является алгоритм случайного леса. Процесс упаковки является параллельным процессом.

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

В отличие от Бэгинга, который работает и строит модели параллельно, бустинг работает последовательно. Ускоряющий классификатор сначала строит базовые модели (или деревья решений), присваивая равные веса всем образцам, а затем фокусируется на правильной классификации ошибочно классифицированных образцов путем последующего их изучения.

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

а. Исходная модель строится как F1, чтобы предсказать целевую переменную y, придавая равную важность всем образцам.

б. Прогнозируемый результат модели, скажем, y1. Ошибка или остатки оцениваются как y-y1

в. Затем строится новая модель h1 с учетом ошибки (y-y1) в качестве зависимой переменной.

д. Наконец, комбинированная модель строится с использованием как F1, так и h1 для создания усиленного варианта F1, что приведет к уменьшению ошибки.

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

Типы алгоритмов бустинга:

В широком смысле существует три основных типа алгоритмов повышения, которые широко используются в мире машинного обучения.

1. Адаптивное повышение (Adaboost): он объединяет группу слабых обучаемых баз для создания сильного обучающегося. В первой итерации каждому образцу данных присваивается одинаковый вес. Если происходит неверный прогноз, этому наблюдению придается большое значение. Adaptive Boosting повторяет эту процедуру на следующей фазе итерации и продолжает до тех пор, пока не будет достигнут желаемый уровень точности.

2. Повышение градиента (GBM). Этот алгоритм повышения работает на принципе алгоритма градиентного спуска. Градиентный спуск является основой современных процедур машинного обучения, который определяется как итеративный процесс оптимизации, помогающий найти локальный минимум/максимум заданной функции. Данная функция на самом деле является функцией потерь, и градиентный спуск работает развивающимся образом, чтобы минимизировать функцию потерь, находя оптимальные параметры для рассматриваемой задачи машинного обучения.

3. Extreme Gradient Boosting (XG Boost): как следует из названия, мы можем думать об этом алгоритме как о GBM с бустерной дозировкой стероидов, которая работает наиболее оптимально, сверхбыстрым способом при разумном использовании программного обеспечения. а также аппаратные комбинации. XGBoost — это масштабируемая и распределенная платформа машинного обучения, которая работает на основе параллельной обработки отдельных моделей деревьев, используемых для задач классификации и регрессии.

XGBoost и его уникальные возможности:

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

Некоторые уникальные функции XGBoost:

я. Регуляризация. Модели XGBoost чрезвычайно сложны и используют различные типы регуляризации, такие как Lasso и Ridge и т. д., чтобы наказывать очень сложные модели.

II. Возможность обработки разреженных данных: XGBoost способен обрабатывать разреженные данные, поэтому обработка пропущенных значений не требуется.

III. Блочные структуры и параллельная обработка. В отличие от многих других алгоритмов машинного обучения, XGBoost может одновременно использовать несколько ядер ЦП благодаря блочной структуре системы. Благодаря этой возможности XGBoost может работать исключительно быстрее и может хорошо сходиться.

IV. Осведомленность о кэше и внесистемные вычисления. XGBoost был разработан с учетом оптимального использования аппаратного обеспечения. Благодаря этому свойству алгоритм работает, выделяя внутреннюю буферную память на каждом шаге и, следовательно, наиболее эффективно используя кэш. Чтобы добавить к этому, алгоритм при обработке очень больших наборов данных в типичных задачах больших данных может сжимать большие данные в маленькую версию, оптимизируя тем самым дисковое пространство и скорость вычислений. Это свойство называется вычислением вне ядра.

v. Встроенная перекрестная проверка: Алгоритм XGBoost по своей структуре имеет возможность перекрестной проверки моделей во время разработки. Это в значительной степени снижает вероятность чрезмерной подгонки и, таким образом, помогает поддерживать компромисс дисперсии смещения.

ви. Обрезка дерева: XGBoost выполняет разбиение до указанной max_depth, а затем начинает обрезать дерево в обратном направлении и удалять разбиения, за пределами которых нет положительного прироста. Этот процесс обрезки дерева в обратном направлении не позволяет XGBoost быть жадным алгоритмом и не приводит к переобучению модели.

Параметры XGBoost:

Сложный алгоритм машинного обучения, такой как XGBoost, имеет множество параметров, поэтому возможности настройки параметров также велики.

Обычно существует три различных типа параметров

а. Общие параметры: для общего функционирования, такого как тип модели (классификация/регрессия), отображение сообщения об ошибке и т. д.

б. Параметры бустера. Это основные наборы параметров, которые управляют отдельными деревьями на каждом этапе. Некоторые из этих параметров бустера перечислены ниже:

я. Эта: скорость обучения

II. Max_depth: максимальная глубина дерева решений компонентов.

III. Max_leaf_nodes: максимальное количество конечных узлов в дереве решений.

IV. Подвыборка: часть наблюдения, которая должна быть выбрана для случайной выборки каждого дерева.

v. colsample_bytree: Тип максимального количества функций. Обозначает долю столбцов для случайных выборок для каждого дерева.

в. Параметры задачи обучения. Как следует из названия, эти параметры определяют цель оптимизации и метрику (RMSE, MAE, LogLoss, Error, AUC и т. д.), которые рассчитываются на каждом этапе.

Python-реализация алгоритма XGBoost:

Мы изучим алгоритм XGBoost в python, используя учебный пакет sci-kit.

По этой причине мы воспользуемся набором данных из репозитория машинного обучения UCI. Она называется «База данных о диабете индейцев пима».

Этот набор данных предоставлен Национальным институтом диабета Индии. Целью нашей модели XGBoost было бы предсказать, есть ли у пациента диабет, на основе определенных диагностических измерений, таких как ИМТ, уровень инсулина, возраст, кожа, артериальное давление и так далее. Зависимая переменная представляет собой двоичный флаг 0/1, где 0 означает, что у пациента нет диабета, а 1 означает, что у него диабет.

Подробнее о данных: https://www.kaggle.com/datasets/uciml/pima-indians-diabetes-database

Первые несколько строк набора данных выглядят следующим образом:

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

а. Считывает набор данных

б. Идентифицирует независимые переменные и зависимую переменную (диабетический флаг: 0/1)

в. Разбивает данные на тренировочное тестирование с использованием соотношения 70–30.

д. Определите модель XGBoost без какой-либо конкретной настройки параметров; т.е. оставить все по умолчанию

е. Обучите алгоритм на обучающем наборе данных

ф. Примените обученную модель к набору тестовых данных

г. Получите точность (в данном случае 74%).

## Load required libraries :
import pandas as pd
import numpy as np
from numpy import loadtxt
from xgboost import XGBClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import warnings
warnings.filterwarnings("ignore")
## Read diabates data :
pima = pd.read_csv("diabetes.csv", header=0, names=col_names)
pima.head()
# split data into X and y
X = pima.iloc[:,0:8]
Y = pima.iloc[:,8]
# split data into train and test sets
seed = 7
test_size = 0.33
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=test_size, random_state=seed)
# fit model no training data
model = XGBClassifier()
model.fit(X_train, y_train)
# make predictions for test data
y_pred = model.predict(X_test)
predictions = [round(value) for value in y_pred]
# evaluate predictions
accuracy = accuracy_score(y_test, predictions)
print("Accuracy: %.2f%%" % (accuracy * 100.0))

Конечные примечания:

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

Отказ от ответственности.Взгляды и мнения, выраженные в этом блоге, являются личными и принадлежат исключительно автору, а не обязательно его работодателю, организации, комитету или другой группе или отдельному лицу.