无法将数据框转换为 h2o 对象
Posted
技术标签:
【中文标题】无法将数据框转换为 h2o 对象【英文标题】:Unable to convert data frame to h2o object 【发布时间】:2015-10-05 05:26:30 【问题描述】:我在 Rstudio 版本 0.99.447 中运行 h2o 包。我运行版本 10.9.5 OSX。
我想按照本教程的步骤在 R 中建立一个本地集群:http://blenditbayes.blogspot.co.uk/2014/07/things-to-try-after-user-part-1-deep.html
第一步似乎没有问题。将我的数据框转换为适当的 h2o 对象似乎是个问题。
library(mlbench)
dat = BreastCancer[,-1] #reading in data set from mlbench package
library(h2o)
localH2O <- h2o.init(ip = "localhost", port = 54321, startH2O = TRUE) #sets up the cluster
dat_h2o <- as.h2o(localH2O, dat, key = 'dat') #this returns an error message
上述as.h2o语句导致如下错误信息
Error in as.h2o(localH2O, dat, key = "dat") :
unused argument (key = "dat")
如果我删除“key”参数,让数据驻留在机器生成名称下的 H2O 键值存储中,则会出现以下错误消息。
Error in .h2o.doSafeREST(conn = conn, h2oRestApiVersion = h2oRestApiVersion,
Unexpected CURL error: Empty reply from server
This 的问题和我问的一样,但解决方案导致我出现同样的错误。
有人遇到过这个问题吗?我不完全确定如何处理。
【问题讨论】:
【参考方案1】:自 H2O-Classic 的最后一个稳定版本和 H2O-3.0 的最新稳定版本以来,将帧从 R 导入 H2O 的语法发生了变化。我相信您使用的是 H2O-3.0 版本,这意味着函数中的某些参数已经更改,模棱两可的“key”参数已更改为“destination_frame”。
H2O-3.0 的行为会有所不同,因为它会注意到前 5 列是 R 数据框中的有序因子;目前我们没有办法保留分类列的顺序。但是,要重现与http://blenditbayes.blogspot.co.uk/2014/07/things-to-try-after-user-part-1-deep.html 上发布的结果相同的结果,您现在必须将帧以 CSV 格式写入磁盘并将其导入 H2O。
library(mlbench)
dat = BreastCancer[,-1] #reading in data set from mlbench package
library(h2o)
localH2O <- h2o.init(ip = "localhost", port = 54321, startH2O = TRUE)
#dat_h2o <- as.h2o(dat, destination_frame = 'dat')
## Will return a "Provided column type c("ordered", "enum") is unknown." error
pathToData <- paste0(normalizePath("~/Downloads/"), "/dat.csv")
write.table(x = dat, file = pathToData, row.names = F, col.names = T)
dat_h2o <- h2o.importFile(path = pathToData, destination_frame = "dat")
对于没有有序因子列的 R data.frames,您可以简单地使用h2o_frame <- as.h2o(object = df)
,其中class(df)
是data.frame
。
【讨论】:
这仍然是“当前”解决方案吗? 在h2o v3.8上测试,不需要在h2o.importFile()中指定destination_frame 他们需要解决这个问题。我在版本 3.10.0.2 上,as.h2o
仍然因有序因素而损坏。【参考方案2】:
BreastCancer 数据框有 5 个 ord.factors 和 5 个因子。正如 Amy Wang 所写,您必须将因子转换为数字。如果您不想将数据写入光盘然后再次读取数据,您可以使用 sapply() 进行转换。
## Format data with no factor
data(BreastCancer, package = 'mlbench') # Load data from mlbench package
dat <- BreastCancer[, -1] # Remove the ID column
dat[, c(1:ncol(dat))] <- sapply(dat[, c(1:ncol(dat))], as.numeric) # Convert factors into numeric
## Start a local cluster with default parameters
library(h2o)
localH2O <- h2o.init(ip = "localhost", port = 54321, startH2O = TRUE)
## Convert Breast Cancer into H2O
dat.h2o <- as.h2o(dat, destination_frame = "midata")
【讨论】:
【参考方案3】:试试这个。它对我有用。
## S3 method for class 'data.frame'
dat.hex <- as.h2o(dat, destination_frame = "dat.hex", ...)
【讨论】:
【参考方案4】:我也遇到了同样的问题。在我的情况下,Mac OSX mavericks 上的问题 JAVA_HOME env 变量指向旧的 Java 版本 6。我的解决方案是在 h2o google groups stream here
【讨论】:
【参考方案5】:你应该试试:
dat_h2o <- as.h2o(dat)
或者:
dat <- as.data.frame(dat)
dat_h2o <- as.h2o(dat)
希望这会有所帮助!
【讨论】:
以上是关于无法将数据框转换为 h2o 对象的主要内容,如果未能解决你的问题,请参考以下文章