我想我已经筋疲力尽了整个互联网,寻找一个关于实现h2o mojo模型以在RShiny中预测的查询的示例/答案。我们创建了一系列模型,并希望预测用户输入值的RShiny前端的分数。但是,使用以下代码来实现预测,我们得到错误
警告:checkForRemoteErrors出错:6个节点产生错误;第一 错误:没有方法asJSON S3 class:H2OFrame
dataInput <- dfName
dataInput <- toJSON(dataInput)
rawPred <- as.data.frame(h2o.predict_json(model= "folder/mojo_model.zip", json = dataInput, genmodelpath = "folder/h2o-genmodel.jar"))
任何人都可以帮忙解决一些问题吗? 谢谢, 西沃恩
答案 0 :(得分:2)
这不是一个闪亮的问题。该错误表示您正在尝试在H2OFrame(而不是R data.frame)上使用toJSON()
,这将无效,因为 jsonlite 库不支持该功能。
相反,您可以使用以下命令将H2OFrame转换为data.frame:
dataInput <- toJSON(as.data.frame(dataInput))
我无法保证toJSON()
会为h2o.predict_json()
生成正确的输入,因为我没有尝试过,因此您必须自己尝试一下。请注意,这可能有用的唯一方法是,如果这是1行data.frame,因为h2o.predict_json()
函数需要单行数据,编码为JSON。如果您尝试为多个记录打分,则必须循环遍历这些行。如果由于某种原因toJSON()
没有为您提供正确的格式,那么您可以使用我在此帖here中编写的函数手动从data.frame创建JSON字符串。
有一个ticket open来创建更好的h2o.predict_json()
版本,它支持从MOJO对数据框(具有多行)进行预测,而不必先转换为JSON。这样就可以避免完全处理JSON。
另一种方法是使用H2O binary model代替MOJO以及标准predict()
函数。这里唯一的要求是必须将模型加载到H2O集群内存中。
答案 1 :(得分:0)
以下工作现在使用前两行的json格式和var带空格的单引号。
df<- data.frameV1=1,V2=1,CMPNY_EL_IND=1,UW_REGION_NAME = "'LONDON & SE'" )
dfstr <- sapply(1:ncol(df), function(i) paste(paste0('\"', names(df)[i], '\"'), df[1,i], sep = ':'))
json <- paste0('{', paste0(dfstr, collapse = ','), '}')
dataPredict <- as.data.frame(h2o.predict_json(model = "D:\\GBM_model_0_CMP.zip", json = json, genmodelpath = "D:\\h2o-genmodel.jar", labels = TRUE))