使用h2o-ensemble时遇到R错误:创建h2o集成模型时收到“坏请求”(临时ID RTMP_5已存在)的错误,尽管之前可以正常工作

嗨,我开始使用h2o集成包(在这里:https://github.com/h2oai/h2o-3/tree/master/h2o-r/ensemble)进行一些数据分析,并尝试了一个演示代码。

之前代码运行得很好:

## ## 设置h2o
library(h2oEnsemble)
nodes <- 2 ## 进程数量
localH2O <-  h2o.init(nthreads=nodes)
## ## 模拟数据集
dat <- matrix(rnorm(6e3), ncol=3, dimnames=list(NULL, c("W", "X", "Y")))
dat <- as.data.frame(dat)
Z <- as.factor(rbinom(nrow(dat), size=1, prob=plogis(.2+.1*dat$W-.2*dat$X)))
dat <- cbind(dat, Z=Z)
## W,X,Y: 输入
## Z: 输出
dat.app <- dat[1:1e3, ]
dat.val <- dat[1e3+(1:1e3), ]
## ## h2o过程
dat.h2o.app <- as.h2o(localH2O, dat.app) ## 学习
dat.h2o.val <- as.h2o(localH2O, dat.val) ## 验证
library.h2o <- c("h2o.deeplearning.Tanh",
                 "h2o.randomForest.1000x100")
h2o.randomForest.1000x100 <- function(...,ntrees=1000,nbins=100) {
    h2oEnsemble::h2o.randomForest.wrapper(..., ntrees=ntrees, nbins=nbins,seed=1)
}
h2o.deeplearning.Tanh <- function(...,hidden=c(200, 200,200),activation="Tanh" ) {
    h2oEnsemble::h2o.deeplearning.wrapper(..., hidden=hidden,
    activation=activation,seed=1)
}
h2o.model <- h2o.ensemble(y="Z", x=c("W", "X", "Y"),
                          training_frame=dat.h2o.app,
                          family="binomial",
                          learner=library.h2o,
                          cvControl=list(V=10, shuffle=TRUE),
                          metalearner="h2o.glm.wrapper") # 收到400坏请求
h2o.pred.val <- predict(h2o.model, newdat=dat.h2o.val)$pred
table((h2o.pred.val>0.5)+0, dat.val$Z)

突然间它抛出了400坏请求(RTMP_5已存在)

R版本3.2.3 (2015-12-10) -- "Wooden Christmas-Tree"
版权所有 (C) 2015 R统计计算基金会
平台: x86_64-pc-linux-gnu (64位)
R是免费软件,并且没有任何保证。
欢迎在特定条件下重新分发它。输入'license()'或'licence()'查看分发详情。
支持自然语言,但运行在英语环境中
R是一个协作项目,有许多贡献者。
输入'contributors()'获取更多信息,输入'citation()'了解如何在出版物中引用R或R包。
输入'demo()'查看一些演示,输入'help()'获取在线帮助,或输入'help.start()'获取HTML浏览器界面的帮助。
输入'q()'退出R。
> ## ## 设置h2o
> library(h2oEnsemble)
> nodes <- 2 ## 进程数量
> localH2O <-  h2o.init(nthreads=nodes)
成功连接到 http://127.0.0.1:54321/ R已连接到H2O集群:
    H2O集群运行时间:         9天19小时
    H2O集群版本:        3.6.0.8
    H2O集群名称:           H2O_started_from_R_root_afl027
    H2O集群总节点数:    1
    H2O集群总内存:   6.98 GB
    H2O集群总核心数:    6
    H2O集群允许的核心数:  2
    H2O集群健康状态:        TRUE
>
> ## ## 模拟数据集
> dat <- matrix(rnorm(6e3), ncol=3, dimnames=list(NULL, c("W", "X", "Y")))
> dat <- as.data.frame(dat)
> Z <- as.factor(rbinom(nrow(dat), size=1, prob=plogis(.2+.1*dat$W-.2*dat$X)))
> dat <- cbind(dat, Z=Z)
> ## W,X,Y: 输入
> ## Z: 输出
> dat.app <- dat[1:1e3, ]
> dat.val <- dat[1e3+(1:1e3), ]
>
> ## ## h2o过程
> dat.h2o.app <- as.h2o(dat.app) ## 学习
 |                                                                              |
                                                                      |   0%
 |                                                                              |
======================================================================| 100%
> dat.h2o.val <- as.h2o(dat.val) ## 验证
 |                                                                              |
                                                                      |   0%
 |                                                                              |
======================================================================| 100%
>
> library.h2o <- c("h2o.deeplearning.Tanh",
+                  "h2o.randomForest.1000x100")
>
> h2o.model <- h2o.ensemble(y="Z", x=c("W", "X", "Y"),
+                           training_frame=dat.h2o.app,
+                           family="binomial",
+                           learner=library.h2o,
+                           cvControl=list(V=10, shuffle=TRUE),
+                           metalearner="h2o.glm.wrapper")
错误:意外HTTP状态码:400坏请求(url = http://127.0.0.1:54321/99/Rapids)
java.lang.IllegalArgumentException [1] "water.rapids.ASTTmpAssign.apply(ASTAssign.java:254)"
                                   [2] "water.rapids.ASTTmpAssign.apply(ASTAssign.java:248)"
                                   [3] "water.rapids.ASTExec.exec(ASTExec.java:46)"
                                            [4] "water.rapids.Session.exec(Session.java:56)"
                                            [5] "water.rapids.Exec.exec(Exec.java:63)"
                                                  [6] "water.api.RapidsHandler.exec(RapidsHandler.java:23)"
                                   [7] "sun.reflect.GeneratedMethodAccessor6.invoke(Unknown Source)"
                           [8] "sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)"
 [9] "java.lang.reflect.Method.invoke(Method.java:622)"
                                     [10] "water.api.Handler.handle(Handler.java:64)"
                                            [11] "water.api.RequestServer.handle(RequestServer.java:644)"
                               [12] "water.api.RequestServer.serve(RequestServer.java:585)"
                                [13] "water.JettyHTTPD$H2oDefaultServlet.doGeneric(JettyHTTPD.java:617)"
                    [14] "water.JettyHTTPD$H2oDefaultServlet.doPost(JettyHTTPD.java:565)"
                       [15] "javax.servlet.http.HttpServlet.service(HttpServlet.java:755)"
                         [16] "javax.servlet.http.HttpServlet.service(HttpServlet.java:848)"
                         [17] "org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:684)"
               在.h2o.doSafeREST(h2oRestApiVersion = h2oRestApiVersion, urlSuffix = page, :    临时ID RTMP_5已存在
调用 : h2o.ensemble ... .eval.driver -> .h2o.__remoteSend -> .h2o.doSafeREST
执行已停止

我有点迷失了,不明白为什么现在它不工作了,训练集应该处于正确的格式中。有人遇到过这个问题吗?如果有,你是如何解决这个错误的?


回答:

这实际上是h2o R包最近版本中的一个错误,该错误已被修复。它将在h2o R包的下一个稳定版本中打补丁,或者你可以在这里下载每日版本:http://h2o-release.s3.amazonaws.com/h2o/master/latest.html

问题源于多次调用h2o.init。目前,你可以通过关闭所有h2o实例并在考虑到这一点的情况下重新尝试来绕过这个错误。

更多信息请参见:https://groups.google.com/forum/#!topic/h2ostream/E6u9YbWmD6k

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注