在循环中运行H2O AutoML:结果保存问题求助
解决H2O AutoML分组循环中保存Leaderboard的问题
我明白你的需求:给数据集中每个分组单独跑AutoML,然后把每个分组的Leaderboard都保存下来对吧?从你给出的代码片段来看,核心问题应该是循环里没做好结果的存储逻辑,或者没处理好H2O对象的作用域。下面给你一套可行的解决方案:
步骤1:准备工作(初始化H2O与数据)
首先确保H2O已经正确初始化,同时你要有分组后的H2O帧列表,以及对应的分组ID列表(用来给结果命名,避免混淆):
library(h2o) # 初始化H2O,可根据机器配置调整参数 h2o.init(nthreads = -1, max_mem_size = "8G") # 你的H2O帧列表(替换成你实际的对象) dfs <- c(df.UPR00015, df.UPR00019, df.UPR00020) # 对应的分组ID列表,和帧列表一一对应 df_ids <- c("UPR00015", "UPR00019", "UPR00020")
步骤2:循环运行AutoML并保存结果
创建一个空的命名列表来存储每个分组的AutoML对象和Leaderboard,这样后续可以随时调用:
# 创建空列表,用来存储每个分组的完整结果 automl_results <- list() # 遍历每个分组 for (i in seq_along(dfs)) { # 取出当前分组的数据集和ID current_data <- dfs[[i]] group_id <- df_ids[i] # 运行AutoML,注意给每个任务设置独特的project_name,防止模型冲突 aml <- h2o.automl( y = "你的目标列名", # 替换成你实际的目标变量列名 training_frame = current_data, max_runtime_secs = 300, # 根据需求调整运行时间,单位秒 project_name = paste0("automl_group_", group_id), seed = 123 # 设置随机种子,保证结果可复现 ) # 获取当前分组的Leaderboard group_leaderboard <- aml@leaderboard # 将结果存入列表,用分组ID作为键,方便后续查找 automl_results[[group_id]] <- list( automl_model = aml, leaderboard = group_leaderboard ) # 可选:把Leaderboard导出为本地CSV文件,永久保存 h2o.exportFile( group_leaderboard, path = paste0("leaderboard_", group_id, ".csv"), overwrite = TRUE # 如果文件已存在则覆盖 ) # 可选:打印当前分组的完成提示,方便跟踪进度 cat("分组", group_id, "的AutoML任务已完成,Leaderboard已保存\n") }
关键注意点
- 独特的project_name:每个分组的AutoML任务必须设置不同的项目名,否则H2O会把不同分组的模型混在一起,导致结果错误
- 命名列表存储:用分组ID作为列表的键,后续你可以通过
automl_results[["UPR00015"]]$leaderboard直接调用对应分组的Leaderboard - 本地导出:用
h2o.exportFile把Leaderboard存成CSV,即使关闭H2O也能保留结果 - 可复现性:设置
seed参数,确保每次运行同一分组的结果一致
后续操作
循环结束后,如果你不需要继续使用H2O,可以关闭连接:
h2o.shutdown(prompt = FALSE)
内容的提问来源于stack exchange,提问作者Jurgen De Jager
相关产品推荐
相关产品推荐

