无法将数据框转换为 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 &lt;- 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 对象的主要内容,如果未能解决你的问题,请参考以下文章

有效地将 pandas 数据帧转换为 h2o 帧

无法在python数据框中将列类型从对象转换为str

Pandas 数据框无法将列数据类型从对象转换为字符串以进行进一步操作

将数据框转换为列表时出错

将数据框转换为rec数组(将对象转换为字符串)

Pandas:无法将对象转换为日期时间 [重复]