H2O - популярная библиотека машинного обучения с открытым исходным кодом, известная своей скоростью и масштабируемостью. Он разработан для обеспечения более высокой производительности по сравнению с другими инструментами машинного обучения, особенно при увеличении объема данных. Он поддерживает набор современных алгоритмов машинного обучения, включая глубокое обучение, деревья ансамблей, такие как XGBoost, RandomForest и т. Д. Он предоставляет различные интерфейсы, включая R и Python, так что пользователи этих языков могут легко получить доступ к мощи H2O. Сегодня я продемонстрирую, как использовать библиотеку H2O в Exploratory, которая известна как пользовательский интерфейс для R.

У меня есть данные о задержке рейсов в США, которые составляют около миллиона строк. И я воспользуюсь алгоритмом RamdomForest из H2O, чтобы построить модель, чтобы предсказать, будет ли данный рейс опаздывать во время вылета.

Настраивать

Установка и запуск H2O

Загрузите H2O со их страницы загрузки и запустите процесс H2O из оболочки, как показано ниже.

cd ~/Downloads          
unzip h2o-3.14.0.3.zip
cd h2o-3.14.0.3
# Start with 8GB of memory
java -Xmx8g -jar h2o.jar

Установка пакета R «h2o»

Пакет h2o R на CRAN немного отстает и не подключается к последней стабильной версии, которую мы только что скачали.

Итак, мы хотим загрузить последний пакет R прямо с сервера H2O, а затем мы можем установить его внутри Exploratory. Кроме того, есть два пакета R, которые необходимы для H2O. Это statmod и RCurl, которые мы также можем установить внутри Exploratory.

На странице списка проектов Exploratory щелкните меню R Package.

Щелкните вкладку «Установить».

Введите «statmod» и нажмите кнопку «Установить». statmod будет установлен.

Таким же образом установите RCurl.

Теперь давайте установим пакет h2o, который мы скачиваем отсюда. Перейдите на вкладку Локальная установка.

При нажатии кнопки «Выбрать файл пакета R» появится всплывающее окно выбора файлов. Выберите файл h2o_3.14.0.3.tar.gz, который мы скачали ранее, и будет установлен пакет h2o.

Зарегистрируйте H2O RandomForest в качестве пользовательской модели в Exploratory

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

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

Давайте создадим собственный сценарий в исследовательском проекте, щелкнув значок + в меню «Сценарии».

Затем введите имя сценария и нажмите кнопку «Создать».

Откроется редактор сценария.

Вот сценарий R, который использует фреймворк, чтобы сделать H2O RandomForest доступным из Exploratory.

# Binary Categorization by H2O RandomForest
# as Exploratory Custom Model Function
# https://docs.exploratory.io/user-defined-model-function.html
# Initialize h2o
library(h2o)
h2o.init(max_mem_size="60g", nthreads=-1)
# Utility function that converts regular data.frame into H2OFrame.
as_h2o <- function(df) {
  # Convert character columns into factor.
  for (colname in colnames(df)) {
    if (class(df[[colname]]) == "character") {
      df[[colname]] <- as.factor(df[[colname]])
    }
  }
  df <- as.h2o(df)
  df
}
# Function that creates H2O RandomForest model.
build_h2o_rf_model <- function(formula, data, ntrees = 5) {
  training_data <- data
  # variable to predict
  lhs_cols <- all.vars(lazyeval::f_lhs(formula))
  # predictors
  rhs_cols <- all.vars(lazyeval::f_rhs(formula))
  if (rhs_cols == ".") {
    # when . is specified, predict with all columns.
    rhs_cols <- colnames(training_data)[colnames(training_data) != lhs_cols]
  }
# convert training data into H2OFrame.
  training_data <- as_h2o(training_data)
  # Train RandomForest model with H2O.
  md <- h2o.randomForest(x = rhs_cols, y = lhs_cols, training_frame = training_data, ntrees = ntrees)
  # Return model and formula as one object.
  ret <- list(model = md, formula = formula)
  class(ret) <- c("h2o_rf_model")
  ret
}
# function to predict on new data with the trained model
augment.h2o_rf_model <- function(x, data = NULL, newdata = NULL, ...) {
  if (is.null(data)) {
    data <- newdata
  }
  formula <- x$formula
  h2o_data <- as_h2o(data) # convert data into H2OFrame.
  # predict with the model.
  predicted_data <- h2o.predict(x$model, h2o_data)
  # convert predicted data back to data.frame.
  predicted_data <- as.data.frame(predicted_data)
  # bind the predicted data with original data, and return it
  ret <- bind_cols(data, predicted_data)
  ret
}
# Return model's predictive performance metrics so that
# they are displayed in "Summary of Fit" table
# in model summary view.
glance.h2o_rf_model <- function(x, ...){
  mdperf<-h2o.performance(x$model)
  h2o.metric(mdperf)
}
# Return variable importance so that
# they are displayed in "Parameter Estimates" table
# in model summary view.
tidy.h2o_rf_model <- function(x, ...){
  h2o.varimp(x$model)
}

Скопируйте приведенный выше сценарий в редактор сценариев.

Пока процесс H2O запущен и работает, нажмите кнопку «Сохранить».

Теперь мы готовы использовать алгоритм H2O RandomForest через пользовательский интерфейс Exploratory. Давай попробуем!

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

Скачать данные

Вот крутой репозиторий github от Szilard Pafka с тестом, который сравнивает различные прогностические платформы.

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

Импортируйте загруженные данные CSV в Exploratory

Разархивируйте загруженный файл и импортируйте в Explorer.

Одна строка в этих данных представляет один полет. Следующие 9 столбцов.

  • Месяц: Месяц полета.
  • DayofMonth: День месяца полета.
  • DayOfWeek: День недели полета.
  • DepTime: время отправления
  • UniqueCarrier: код авиакомпании-перевозчика
  • Пункт отправления: код аэропорта отправления.
  • Пункт назначения: код аэропорта пункта назначения
  • Расстояние: расстояние между исходной точкой и пунктом назначения.
  • dep_delayed_15min: задерживается ли вылет рейса более чем на 15 минут

Постройте модель RandomForest

Давайте создадим модель RandomForest, которая прогнозирует столбец dep_delayed_15min, который показывает, задерживаются ли рейсы более чем на 15 минут, на основе
всех остальных столбцов.

Введите следующую команду, как показано ниже.

build_model(model_func=build_h2o_rf_model, formula=dep_delayed_15min~., test_rate=0.01, ntrees=50)

test_rate = 0,01 здесь означает сохранение 1% данных для тестирования, без использования для обучения.

Щелкните кнопку «Выполнить».

На моем MacBook Pro (2016 г.) обучение длится 2 минуты и чуть больше. Если я тем временем открою Activity Monitor, я увижу java-процесс, на котором работает H2O, вверху списка потребления ЦП.

564% означало бы, что он использует около 5,64 ядра ЦП параллельно, что будет способствовать его репутации в плане высокой производительности.

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

В таблице «Сводка подгонки» показаны результаты прогнозирования, измеренные с использованием самих данных обучения, а в таблице «Оценки параметров» фактически показана важность переменных.

Эта важность переменной - это то же самое, что мы показываем в аналитическом представлении Важность переменной в Исследовательском, что более подробно объясняется в этом документе.

Прогноз

Помните 1% данных, которые мы отложили для тестирования? Давайте спрогнозируем тестовые данные, используя эту модель.

Откройте диалоговое окно «Прогнозирование» из следующего меню.

В диалоговом окне «Прогнозирование» выберите «Тест», чтобы сделать прогноз на основе тестовых данных.

Результат прогноза показан ниже.

Y и N соответственно показывают прогнозируемую вероятность опоздания рейса более чем на 15 минут.

Оценка качества прогнозирования

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

Затем давайте посмотрим на метрики модели, чтобы оценить ее прогностическую эффективность.

Щелкните меню «Двоичная классификация - Показатели».

Затем в диалоговом окне выберите столбец прогнозируемой вероятности (столбец Y) и столбец фактического значения (dep_delayed_15min).

Вот результат.

Уровень точности 0,7809 означает, что в 78,09% случаев прогнозы были верными.

Кроме того, AUC - это индекс, который показывает, насколько четко предсказанная модель вероятности разделяет отложенные дела и неотложные дела. Это число от 0 до 1, 0,5 означает не лучше, чем случайное предположение. 0,7956 звучит неплохо.

Мы также можем нарисовать кривую ROC. Щелкните меню «Бинарная классификация - ROC».

В диалоговом окне укажите столбец Y и столбец dep_delayed_15min.

А вот итоговые данные кривой ROC.

Давайте нарисуем диаграмму с этими данными. Синяя область под кривой ROC - это только что изученная AUC (0,7956).

Резюме

Как вы видели, мы можем быстро получить доступ к мощи H2O, используя пакет «h2o» R и структуру расширения модели Exploratory. Благодаря многопроцессорному масштабируемому механизму машинного обучения H2O мы можем строить прогнозные модели гораздо быстрее с большими наборами данных.

В следующем посте я сравню RandomForest H2O с другими реализациями RandomForest в R, такими как пакеты randomForest и ranger, и посмотрю, насколько на самом деле быстр H2O. Будьте на связи!

Если у вас еще нет Exploratory Desktop, вы можете зарегистрироваться здесь, чтобы получить 30-дневную бесплатную пробную версию. Если вы сейчас студент или преподаватель, то это бесплатно!