我对as.h2o()
的大多数人都有相反的问题,尽管问题是相同的。我必须将一系列仅19列宽的单行向量转换并馈送到h2o自动编码器。每个向量大约需要0.29秒才能使用as.h2o()
进行转换,这会导致严重的瓶颈。
有人可以建议一种可能更快的替代方法吗? (由于各种原因,我无法逐个发送单行向量,因此在调用as.h2o之前聚合矩阵中的数据不是一种选择。)
非常感谢。
答案 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 = ','), '}')