gpt4 book ai didi

r - H2O:在函数 'predict' 中找不到参数 'model' 的深度学习对象

转载 作者:行者123 更新时间:2023-12-04 10:14:55 24 4
gpt4 key购买 nike

我只是在测试 h2o,特别是它的深度学习能力,因为我听说过关于它的好消息。到目前为止,我一直在使用以下代码:

     library(h2o)
library(caret)
data("iris")

# Initiate H2O --------------------
h2o.removeAll() # Clean up. Just in case H2O was already running
h2o.init(nthreads = -1, max_mem_size="22G") # Start an H2O cluster with all threads available

# Get training and tournament data -------------------
a <- createDataPartition(iris$Species, list=FALSE)
training <- iris[a,]
test <- iris[-a,]

# Convert target to factor -------------------
target <- as.factor(iris$Species)

feature_names <- names(train)[1:(ncol(train)-1)]

train_h2o <- as.h2o(train)
test_h2o <- as.h2o(test)

prob <- test[, "id", drop = FALSE]

model_dl <- h2o.deeplearning(x = feature_names, y = "target", training_frame = train_h2o, stopping_metric = "logloss")
h2o.logloss(model_dl)

pred_dl <- predict(model_dl, newdata = tourn_h2o)
prob <- cbind(prob, as.data.frame(pred_dl$p1, col.names = "dl"))
write.table(prob[, c("id", "dl")], paste0(model_dl@model_id, ".csv"), sep = ",", row.names = FALSE, col.names = c("id", "probability"))

相关部分实际上是最后一行,我收到以下错误:
Error in .h2o.doSafeREST(h2oRestApiVersion = h2oRestApiVersion, urlSuffix = page,  : 


ERROR MESSAGE:

Object 'DeepLearning_model_R_1494350691427_70' not found in function: predict for argument: model

有没有人遇到过这个?是否有任何我可能会遗漏的简单解决方案?提前致谢。

编辑:使用更新后的代码,我收到错误消息:
Error in .h2o.doSafeREST(h2oRestApiVersion = h2oRestApiVersion, urlSuffix = page,  : 


ERROR MESSAGE:

Illegal argument(s) for DeepLearning model: DeepLearning_model_R_1494428751150_1. Details: ERRR on field: _train: Training data must have at least 2 features (incl. response).
ERRR on field: _stopping_metric: Stopping metric cannot be logloss for regression.

我认为这与读取 Iris 数据集的方式有关。

最佳答案

第一个问题的答案:您的原始错误消息听起来像是您在事情同步时可以获得的消息。例如。也许您一次运行了两个 session ,并在一个 session 中删除了模型;另一个 session 不会知道它的变量现在已经过时了。 H2O 允许多个连接,但它们必须是合作的。 (流程 - 见下一段 - 算作第二次 session 。)

除非你能做出一个可重复的例子,否则耸耸肩,把它归结为小鬼,然后开始一个新的 session 。或者,去看看 Flow 中的数据/模型(一个总是在 127.0.0.1:54321 上运行的网络服务器),看看是否有东西不再存在。

对于您的 EDIT 问题,您的模型正在制作回归模型,但您正在尝试使用 logloss,因此认为您在进行分类。这是由于没有将目标变量设置为因子造成的。您当前的 as.factor()线在错误的数据上,在错误的地方。它应该在您的 as.h2o() 之后线路:

train_h2o <- as.h2o(training)  #Typo fix
test_h2o <- as.h2o(test)

feature_names <- names(training)[1:(ncol(training)-1)] #typo fix
y = "Species" #The column we want to predict

train_h2o[,y] <- as.factor(train_h2o[,y])
test_h2o[,y] <- as.factor(test_h2o[,y])

然后使用以下方法制作模型:
model_dl <- h2o.deeplearning(x = feature_names, y = y, training_frame = train_h2o, stopping_metric = "logloss")

获取预测:
pred_dl <- predict(model_dl, newdata = test_h2o)  #Typo fix

并使用以下方法将正确答案与预测进行比较:
cbind(test[, y], as.data.frame(pred_dl$predict))

(顺便说一句,H2O 总是完美地将 Iris 数据集列检测为数字与因子,因此不需要上面的 as.factor() 行;您的错误消息一定是在您的原始数据上。)

StackOverflow 建议:完整测试您的可重现示例,并复制并粘贴该确切代码,以及代码给您的确切错误消息。你的代码有很多小错别字。例如。 train在某些地方, training在其他。 createDataPartition()没有给予;我假设 a = sample(nrow(iris), 0.8*nrow(iris)) . test没有“id”列。

其他 H2O 建议:
  • 运行 h2o.removeAll()之后 h2o.init() .如果之前运行,它会给你一条错误消息。 (我个人避免使用该功能 - 这是一种错误地留在生产脚本中的东西......)
  • 考虑提前将数据导入 h2o,并使用 h2o.splitFrame()拆分它。 IE。避免在 R 中做 H2O 可以轻松处理的事情。
  • 如果可以,尽量避免将数据放在 R 中。更喜欢 importFile() 而不是 as.h2o()。

  • 超越最后两点的想法是 H2O 将扩展到超出一台机器的内存,而 R 不会。与试图在两个地方跟踪相同的事情相比,它也没有那么困惑。

    关于r - H2O:在函数 'predict' 中找不到参数 'model' 的深度学习对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43879388/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com