【问题标题】:Not able to score test data after loading the h2o random forest model object again再次加载 h2o 随机森林模型对象后无法对测试数据进行评分
【发布时间】:2015-12-15 15:09:18
【问题描述】:

我正在使用R 中的h2o 包来构建随机森林模型。我的任务需要我在以后重复对测试数据进行评分,所以我将随机森林模型对象保存如下。

save("D:/model_random_forest.RData")

为了给数据打分,我稍后将模型对象再次加载回内存中,如下所示

 load("D:/model_random_forest.RData")

但是当我使用得分时

scores <- h2o.predict(model_random_forest, test_data) 

我收到以下错误

    ERROR: Unexpected HTTP Status code: 404 Not Found (url =     http://127.0.0.1:54321/3/Predictions/models/DRF_model_R_1442519642868_26/frames/test17_normal.hex_2)

water.exceptions.H2OKeyNotFoundArgumentException
 [1] "water.api.ModelMetricsHandler.predict(ModelMetricsHandler.java:203)"   
 [2] "sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)"           
 [3] "sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)"           
 [4] "sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)"       
 [5] "java.lang.reflect.Method.invoke(Unknown Source)"                       
 [6] "water.api.Handler.handle(Handler.java:58)"                             
 [7] "water.api.RequestServer.handle(RequestServer.java:637)"                
 [8] "water.api.RequestServer.serve(RequestServer.java:578)"                 
 [9] "water.JettyHTTPD$H2oDefaultServlet.doGeneric(JettyHTTPD.java:617)"     
 [10] "water.JettyHTTPD$H2oDefaultServlet.doPost(JettyHTTPD.java:565)"          
 [11] "javax.servlet.http.HttpServlet.service(HttpServlet.java:755)"          
 [12] "javax.servlet.http.HttpServlet.service(HttpServlet.java:848)"          
 [13]     "org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:684)"

Error in .h2o.doSafeREST(conn = conn, h2oRestApiVersion = h2oRestApiVersion,    : 
  Object 'DRF_model_R_1442519642868_26' not found in function: predict for  argument: model

当我使用 R 包构建模型时,整个保存、加载和评分方法都可以正常工作,但在这里却以某种方式失败了。有人可以提供解决方案吗?每次我想对一些数据进行评分时,我都无法再次重建模型。

H2o 连接似乎很好,因为当模型是新建的并且仍然存在于内存中时,评分会顺利进行。

【问题讨论】:

    标签: r random-forest h2o


    【解决方案1】:

    H2O 模型对象不同于 R 对象。 H2O 模型对象存储在 H2O 集群中,在 R 中,您只能看到对它的引用,这看起来像一个普通的 R 模型。因此,如果您保存您的 R 会话并稍后重新启动它,您可能会针对不同的 H2O 集群运行,该集群没有您的 R 会话引用的模型。

    解决方案是通过h2o.saveModel/h2o.saveModel方法保存/加载H2O模型。

    例如:

    model <- h2o.randomForest(...)
    model_path <- h2o.saveModel(
            object = model, 
            path = "/tmp/mymodel", 
            force = TRUE)
    
    print(model_path)
    

    有关更多示例,请参阅文档:http://h2o-release.s3.amazonaws.com/h2o/rel-slater/5/docs-website/h2o-r/h2o_package.pdf

    【讨论】:

      猜你喜欢
      • 2023-03-17
      • 2017-12-04
      • 2018-09-28
      • 2018-03-12
      • 2019-07-10
      • 2018-03-10
      • 2016-01-24
      • 2019-05-04
      • 2016-04-09
      相关资源
      最近更新 更多