在循环中运行H2O的自动ML

时间:2018-04-23 16:11:10

标签: r loops machine-learning data-science h2o

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

我的计划是为我的数据集中的每个组运行AutoML,并保存每个组的排行榜。我已经按组创建了子集化数据集,所以基本上我想要做的是循环遍历h2o帧列表并为每个数据集构建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对象列表后,我可以轻松地循环检索最佳模型以及随之而来的所有指标。

提前致谢, 约根

1 个答案:

答案 0 :(得分:1)

如果您在同一训练集上随后运行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 } 很容易,因为每次运行时它都应该是唯一的。如果您的数据集具有唯一的名称,则可以使用该名称。示例如下。

## Html##
output is my class here
<div class="col-sm-10 ac">
<center><b><span class="output" value='1'>1</span> Child</b></center> 
</div>
## jquery ##
var ar_value = $('.output').val(); /*--is this correct--*/