Альтернатива `as.h2o()` для небольших данных?

У меня есть противоположная проблема для большинства людей с as.h2o(), хотя в результате проблема та же. Я должен преобразовать и передать серию однорядных векторов шириной всего 19 столбцов в автоматический кодер воды. Для преобразования каждого вектора требуется около 0,29 секунд. as.h2o(), что вызывает серьезное узкое место.

Кто-нибудь может предложить альтернативный подход, который может быть быстрее?
(По разным причинам у меня нет альтернативы отправке однорядных векторов один за другим, поэтому агрегирование данных в матрицах перед вызовом as.h2o не вариант.)

Большое спасибо.

1 ответ

Если это создает узкое место, вы должны использовать модель MOJO (или POJO) для оценки по строкам вместо модели, загруженной в память в кластере H2O. Это то, для чего предназначен формат модели MOJO/POJO - быстрый скоринг без необходимости преобразования между R data.frame и H2OFrame, а также не требует запуска кластера H2O. Вы можете вообще пропустить R здесь.

В качестве альтернативы, если ваш конвейер требует R, вы все равно можете использовать модель MOJO/POJO из R через h2o.predict_json() функция; он просто требует от вас преобразования вашего однострочного data.frame в строку JSON. Это может несколько устранить узкое место, хотя прямой Java с методом оценки моделей MOJO/POJO (см. Выше) будет самым быстрым.

Вот пример того, как это выглядит при использовании файла GBM MOJO:

library(h2o)

model_path <- "~/GBM_model_python_1473313897851_6.zip"
json <- '{"V1":1, "V2":3.0, "V3":0}'
pred <- h2o.predict_json(model = model_path, json = json)

Вот как построить строку JSON из 1-строки data.frame:

df <- data.frame(V1 = 1, V2 = 3.0, V3 = 0)
dfstr <- sapply(1:ncol(df), function(i) paste(paste0('\"', names(df)[i], '\"'), df[1,i], sep = ':'))
json <- paste0('{', paste0(dfstr, collapse = ','), '}')
Другие вопросы по тегам