Как обучить несколько моделей H2O во вложенном фрейме данных? - PullRequest
0 голосов
/ 27 апреля 2020

Мне было интересно, есть ли удобный способ обучения нескольких моделей H2O из вложенного фрейма данных в R. Предположим, у нас есть набор данных со следующей структурой, и я хочу обучить одну модель для каждого вида:

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)

enter image description here

Есть ли способ загрузки и использования набора данных в h2o без построения al oop для разбиения вложенного списка? Я хотел бы избежать шага создания объектов h2o для каждой строки.

Редактировать: Например, чтобы предсказать Sepal.Length с другими входными значениями c, я бы обучил одну модель для строки 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")

После этого извлеките и сохраните обученную модель и создайте таблицу сопоставления, чтобы я знал, какая модель принадлежит какому виду.

1 Ответ

0 голосов
/ 27 апреля 2020

С помощью purrr вы можете встроить его в таблицу, но, скажем, если вы хотите сделать прогноз, вам может понадобиться использовать 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))))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...