Введение

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

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

Обзор руководства

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

Остальная часть урока была описана как:

  1. Подготовка данных
  2. Строительство трубопровода
  3. Обучение модели
  4. Выполнение прогнозирования
  5. Оценка модели
  6. Настройка гиперпараметров

Подготовка данных

В этом уроке мы будем использовать набор данных Servo в качестве примера. Набор данных серводвигателя — это небольшой набор данных, содержащий информацию о характеристиках серводвигателя. Он состоит из 5 атрибутов, а именно «двигатель», «винт» (оба состоят из классов A, B, C, D, E), «pgain», «vgain» и «class». Нашей целью в этом уроке будет предсказание переменной «класс».

Чтобы подготовить наши данные для распределенного обучения с помощью XGBoost и Spark, нам сначала нужно загрузить набор данных как Spark RDD. Для загрузки данных мы будем использовать встроенную программу чтения CSV Spark.

Сначала мы создали сеанс Spark, который является точкой входа для любой программы Spark. Затем мы определили схему данных, используя класс StructType Spark, который позволяет нам указывать типы данных каждого столбца в CSV-файле. В нашем случае у нас есть пять столбцов: «мотор» и «винт», которые являются строками, и «pgain», «vgain» и «class», которые являются двойными. Затем мы использовали сеанс Spark для загрузки CSV-файла в фрейм данных Spark, используя метод чтения.

Строительство трубопровода

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

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

Следующим шагом будет выполнение One Hot Encoding с использованием файла OneHotEncoder. На этом этапе индексированные двойные метки преобразуются в двоичный разреженный векторный формат, который необходим для работы алгоритма XGBoost.

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

Наконец, XGBoostRegressor используется для обучения регрессионной модели. Мы устанавливаем различные гиперпараметры для XGBoostRegressor, такие как «eta», «max_length», «objective», «num_round», «num_workers» и «tree_method». Эти гиперпараметры контролируют производительность и точность модели.

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

Обучение модели

Затем мы вписываем конвейер, созданный на предыдущем шаге, в набор обучающих данных. Метод подгонки по очереди применяет каждый этап конвейера для преобразования входных данных и обучения модели регрессии. Метод fit возвращает объект PipelineModel, содержащий обученную модель, а также преобразования, примененные к обучающим данным. Мы сохраняем эту модель в переменной model. Получив обученную модель, мы можем использовать ее для прогнозирования новых данных.

Выполнение прогнозирования

Эта строка кода выполняет этап прогнозирования конвейера машинного обучения с использованием обученной модели. Метод transform применяется к набору данных test, который применяет преобразования, указанные в конвейере (например, разработку функций и кодирование), и применяет обученную регрессионную модель XGBoost для прогнозирования тестовых данных.

Результирующий predict DataFrame содержит исходные входные объекты, столбец прогнозируемой метки и любые дополнительные столбцы, указанные в конвейере. Мы можем использовать этот фрейм данных, чтобы оценить производительность обученной модели и сделать прогнозы на основе новых, ранее неизвестных данных.

Оценка модели

В этом разделе модель, обученная в предыдущем разделе, оценивается на тестовом наборе данных.

Сначала создается RegressionEvaluator со столбцом меток, установленным на Constants.REGRESSION_COL_5, который является именем столбца, который содержит истинные метки набора тестовых данных, и столбцом прогнозирования, установленным на Constants.PREDICTION, который является именем столбца, содержащего прогнозируемые данные. значения модели.

Затем метод evaluate из RegressionEvaluator вызывается в predict DataFrame, который вычисляет метрику оценки (в этом случае метрикой оценки по умолчанию для регрессии является среднеквадратическая ошибка).

Настройка гиперпараметров

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

Сначала с помощью ParamGridBuilder() определяется сетка гиперпараметров. В этом случае два гиперпараметра XGBoostRegressor (maxDepth и eta) настраиваются на диапазон значений.

Затем создается объект CrossValidator() для выполнения k-кратной перекрестной проверки обучающего набора. Метод setEstimator() устанавливает конвейер в качестве оценщика для обучения, setEvaluator() устанавливает оценщик регрессии для вычисления производительности модели, setEstimatorParamMaps() устанавливает сетку гиперпараметров, а setNumFolds() устанавливает количество сверток для перекрестной проверки.

Метод cv.fit(train) обучает перекрестно проверенную модель на наборе обучающих данных. После обучения лучшая модель получается с использованием атрибута bestModel объекта cvModel. Затем bestModel преобразуется в PipelineModel для извлечения последней стадии (которой является XGBoostRegressionModel). Сводка обучения лучшей модели выводится на консоль с помощью bestModel.summary.

Наконец, лучшая модель сохраняется с помощью метода write() объекта model, который перезаписывает любую существующую модель, сохраненную в указанном каталоге.

Выполнение кода

Чтобы выполнить код и следовать этому руководству, вам необходимо создать и запустить код с помощью Apache Spark. Полный код этого урока можно найти здесь. Вот шаги, которые нужно предпринять:

Собрать код. Откройте окно терминала и перейдите в корневой каталог проекта, где находится файлbuild.sbtfile. Используйтеsbt clean assemblyдля создания кода. Эта команда скомпилирует код, загрузит зависимости и создаст JAR-файл сборки, содержащий все необходимые классы.

Выполнение с использованием «spark-submit». После создания кода вы можете использовать команду spark-submit, чтобы отправить приложение в кластер Spark:spark-submit --class * <path-to-jar>. Замените «path-to-jar» фактическим путем к созданному JAR-файлу сборки. Используйте следующую команду для выполнения кода:

Заключение

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

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

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