r - 如何将训练有素的 H2O BinaryModel 从服务器移动到本地 R
问题描述
xgboost
我在虚拟机上用 R训练了一个使用 h2o 框架。我使用该函数将模型保存在服务器的文件夹中,h2o.saveModel()
并且可以使用该函数正确加载它h2o.loadModel()
。
xgboost_model <- h2o.xgboost(
x = predictors,
y = response,
training_frame = train_h2o,
model_id = "xgboost_v1"
)
path_for_model = "/data/R/xxx/xxx/xxx/"
path_saved_model <- h2o.saveModel(xgboost_model, path = path_for_model, force = FALSE)
loaded_model <- h2o.loadModel(path_saved_model)
当我在本地硬盘上path_for_model
的函数生成的目录中下载文件时,h2o.saveModel()
我无法在本地 RStudio 环境中加载它,并且收到以下错误消息
找不到算法 url 名称 xgboost 的生成器
:
ERROR: Unexpected HTTP Status code: 400 Bad Request (url =
http://localhost:54321/99/Models.bin/)
java.lang.IllegalArgumentException
[1] "java.lang.IllegalArgumentException: Cannot find Builder for algo url
name xgboost"
[2] " hex.ModelBuilder.ensureBuilderIndex(ModelBuilder.java:141)"
[3] " hex.ModelBuilder.havePojo(ModelBuilder.java:120)"
[4] " hex.Model.havePojo(Model.java:119)"
[5] " water.api.schemas3.ModelSchemaV3.fillFromImpl(ModelSchemaV3.java:73)"
[6] " water.api.schemas3.ModelSchemaV3.fillFromImpl(ModelSchemaV3.java:21)"
[7] " water.api.ModelsHandler.importModel(ModelsHandler.java:210)"
[8] " sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)"
[9] " sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)"
[10] " sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)"
[11] " java.lang.reflect.Method.invoke(Unknown Source)"
[12] " water.api.Handler.handle(Handler.java:63)"
[13] " water.api.RequestServer.serve(RequestServer.java:451)"
[14] " water.api.RequestServer.doGeneric(RequestServer.java:296)"
[15] " water.api.RequestServer.doPost(RequestServer.java:222)"
[16] " javax.servlet.http.HttpServlet.service(HttpServlet.java:755)"
[17] " javax.servlet.http.HttpServlet.service(HttpServlet.java:848)"
[18] " org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:684)"
[19] " org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:503)"
[20] " org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086)"
[21] " org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:429)"
[22] " org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020)"
[23] " org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)"
[24] " org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:154)"
[25] " org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)"
[26] " water.JettyHTTPD$LoginHandler.handle(JettyHTTPD.java:197)"
[27] " org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:154)"
[28] " org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)"
[29] " org.eclipse.jetty.server.Server.handle(Server.java:370)"
[30] " org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:494)"
[31] " org.eclipse.jetty.server.BlockingHttpConnection.handleRequest(BlockingHttpConnection.java:53)"
[32] " org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:982)"
[33] " org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:1043)"
[34] " org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:865)"
[35] " org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:240)"
[36] " org.eclipse.jetty.server.BlockingHttpConnection.handle(BlockingHttpConnection.java:72)"
[37] " org.eclipse.jetty.server.bio.SocketConnector$ConnectorEndPoint.run(SocketConnector.java:264)"
[38] " org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)"
[39] " org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)"
[40] " java.lang.Thread.run(Unknown Source)"
Error in .h2o.doSafeREST(h2oRestApiVersion = h2oRestApiVersion, urlSuffix = page, :
ERROR MESSAGE:
Cannot find Builder for algo url name xgboost
我知道可以下载模型的 pojo 和/或 mojo java 版本,但我想坚持使用 R 二进制文件。我在任何地方都没有看到任何与我的错误类似的相关帖子。
我正在使用 H2O 版本 3.20.0.3 和 R 版本 3.4.4 。
解决方案
推荐阅读
- r - 使用 R 将数字序列拆分为 10 位数字组
- python - 如何保留尾随零?
- android-studio - 有谁知道如何从亚马逊工作区调试平板电脑上的安卓应用程序?
- coq - Agda 相当于 `destruct
方程: ` - apache-kafka - Kafka 对时间戳进行分区以仅处理当前小时分区中的消息
- swift - SwiftUI 图像未正确显示为叠加层
- node.js - 用 aes-128-cbc 和 IV 解密十六进制字符串
- powerbi - TOPN DAX 函数提供所有项目,而不是前 3 名员工姓名
- arrays - Swift - 检查一个值是否在数组中
- php - 通过 Web 界面使用 sudo 安全地执行 shell 脚本