【问题标题】:How to train multiple h2o models on a nested data frame?如何在嵌套数据框上训练多个 h2o 模型?
【发布时间】:2020-08-11 03:04:14
【问题描述】:

我想知道是否有一种方便的方法可以从 R 中的嵌套数据框中训练多个 h2o 模型。 假设我们有一个具有以下结构的数据集,我想为每个 Species 训练一个模型:

dataset(iris)
iris_nested<-iris%>%
  dplyr::mutate(dataset=dplyr::if_else(sample(1:nrow(iris))<100,"train","val"))%>%
  dplyr::group_by(Species,dataset)%>%
  tidyr::nest()%>%
  tidyr::pivot_wider(names_from = dataset,values_from = data)

有没有一种方法可以将数据集加载和使用到 h2o 中,而无需构建循环来分解嵌套列表?我想避免为每一行创建 h2o 对象的步骤。

编辑: 例如,要使用其他数字输入预测 Sepal.Length,我将为第 i 行训练一个模型:

library(h2o)
h2o.init()   
h2o_train<-as.h2o(iris_nested[["train"]][[i]])
h2o_val<-as.h2o(iris_nested[["val"]][[i]])

h2o_trainedmodel <- h2o.automl(
  x = c("Sepal.Width","Petal.Length","Petal.Width"), 
  y = "Sepal.Length",
  training_frame = h2o_train,
  leaderboard_frame = h2o_val,
  project_name = "run1")

之后,将训练好的模型提取保存,生成映射表,这样我就知道哪个模型属于哪个物种了。

【问题讨论】:

  • 你能举例说明如何将单个数据集加载到 h2o 中吗?

标签: r h2o


【解决方案1】:

使用 purrr 你可以将它嵌入到 tibble 中,但是假设你想进行预测,你可能需要使用 map2,比我想象的要复杂一点:

library(dplyr)
library(h2o)
library(purrr)

iris%>%
dplyr::mutate(dataset=dplyr::if_else(sample(1:nrow(iris))<100,"train","val"))%>%
dplyr::group_by(Species,dataset)%>%
tidyr::nest()%>%
tidyr::pivot_wider(names_from = dataset,values_from = data) %>%
mutate(model=map(train,~h2o.randomForest(y="Sepal.Width",
x=c("Sepal.Length","Petal.Width","Petal.Length"),training_frame=as.h2o(.x))))

【讨论】:

    猜你喜欢
    • 2018-06-16
    • 1970-01-01
    • 2020-12-15
    • 2018-02-17
    • 1970-01-01
    • 2021-10-16
    • 2020-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多