替代`as.h2o()`用于小数据?

时间:2017-12-11 18:48:40

标签: h2o

我对as.h2o()的大多数人都有相反的问题,尽管问题是相同的。我必须将一系列仅19列宽的单行向量转换并馈送到h2o自动编码器。每个向量大约需要0.29秒才能使用as.h2o()进行转换,这会导致严重的瓶颈。

有人可以建议一种可能更快的替代方法吗? (由于各种原因,我无法逐个发送单行向量,因此在调用as.h2o之前聚合矩阵中的数据不是一种选择。)

非常感谢。

1 个答案:

答案 0 :(得分:1)

如果这会产生瓶颈,则应使用MOJO (or POJO) model进行逐行评分,而不是将模型加载到H2O集群的内存中。这就是MOJO / POJO模型格式的设计目标 - 快速评分,无需在R data.frame和H2OFrame之间进行转换,也不需要运行H2O集群。你可以在这里完全跳过R.

或者,如果您的管道需要R,您仍然可以通过h2o.predict_json()函数使用R中的MOJO / POJO模型;它只需要您将1行data.frame转换为JSON字符串。这可能会有所缓解瓶颈,尽管使用MOJO / POJO模型评分方法的直接Java(上图)将是最快的。

以下是使用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)

以下是如何从1行data.frame:

构造JSON字符串
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 = ','), '}')
相关问题