我试图在for循环中运行H2O的AutoML,但是在每次迭代后保存结果都遇到麻烦。

我的计划是为数据集中的每个组运行AutoML,并为每个组保存排行榜。我已经按组创建了子集的数据集,所以本质上我想要做的是遍历水框架列表并为每个数据集构建automl。以下是我使用的代码:

#list of h2o frames
dfs = c(df.UPR00015, df.UPR00019, df.UPR00020)
#list of frame id's
df_id = c("df.UPR00015", "df.UPR00019", "df.UPR00020")
#counter
count = 1


然后,我遍历数据帧,并尝试如下保存每个autoML对象:

for (df in dfs){

#run auto for each data frames and name it as id
assign(sprintf("aml_%s", df_id[count]) , h2o.automl(x = x,
         y = y,
         training_frame = df,
         max_models = 5))

 #increase iterator
 count = count + 1

}


这几乎可行。它返回3个正确命名的H2oAutoML对象(aml_df.UPR00015,aml_df.UPR00019,aml_df.UPR00020),但是它们在页首横幅中都包含相同的信息。这意味着将为3个不同的子集创建相同的页首横幅。在我的实际应用程序中,我有40个不同的组来构建模型,但为简单起见,仅列出了3个。

谁能帮我找出问题所在,或者与我分享更好的循环运行每个数据框或数据集中每个组的AutoML的方法?在获得H2OAutoML对象的列表之后,我可以轻松地遍历以检索最佳模型以及随之而来的所有度量。

提前致谢,
于尔根

最佳答案

如果您随后在同一训练集上连续运行H2O AutoML,则默认情况下,它将在排行榜中添加更多模型(因为自动生成的project_name相同)。

获得单独的排行榜的方法是,每次执行project_name时,将唯一的值传递给h2o.automl()参数。 project_name易于使用的方法是将Sys.time()包裹在as.character()中,因为每次运行时它都应该是唯一的。如果数据集具有唯一名称,则可以改用该名称。下面的例子。

for (df in dfs){

#run auto for each data frames and name it as id
assign(sprintf("aml_%s", df_id[count]) , h2o.automl(x = x,
         y = y,
         training_frame = df,
         max_models = 5,
         project_name = as.character(Sys.time())))

 #increase iterator
 count = count + 1

}

关于r - 循环运行H2O的Auto ML,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49985533/

10-12 22:10