我已经使用mlr和h2o软件包创建了一个R模型,如下所示:
library(h2o)
rfh20.lrn = makeLearner("classif.h2o.randomForest", predict.type = "prob")
完成模型调整,模型启动h2o JVM并将R连接到h2o集群,建模完成,我将模型另存为.rds文件。
saveRDS(h2orf_mod, "h2orf_mod.rds")
我做预测
pred_h2orf <- predict(h2orf_mod, newdata = newdata)
然后我关闭h2o
h2o.shutdown()
稍后我重新调用保存的模型
h2orf_mod <- readRDS("h2orf_mod.rds")
启动h2o,以便JVM将R连接到h2o集群
h2o.init()
现在该模型来自本地保存的位置,群集不知道该模型,当我进行预测时,会出现明显的错误
ERROR: Unexpected HTTP Status code: 404 Not Found (url = http://localhost:54321/4/Predictions/models/DRF_model_R_1553297204511_743/frames/data.frame_sid_b520_1)
water.exceptions.H2OKeyNotFoundArgumentException
[1] "water.exceptions.H2OKeyNotFoundArgumentException: Object 'DRF_model_R_1553297204511_743' not found in function: predict for argument: model"
Error in .h2o.doSafeREST(h2oRestApiVersion = h2oRestApiVersion, urlSuffix = page, : ERROR MESSAGE: Object 'DRF_model_R_1553297204511_743' not found in function: predict for argument: model
我想知道如何处理此问题,无论保存的模型是上传到集群还是其他对象,因为每次构建模型都不是有效的方法。
答案 0 :(得分:1)
根据注释,而不是使用saveDRS / readRDS保存模型,将模型另存为
h2oModelsaved <- h2o.saveModel(object = h2orf_model, path = "C:/User/Models/")
重新调用模型
h2o.init()
h2oModelLoaded <- h2o.loadModel(h2oModelsaved)
将测试数据转换为h2o Frame
newdata <- as.h2o(testdata)
然后调用预测
pred_h2orf2 <- predict(h2oModelLoaded, newdata = newdata)
这很完美