You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在循环中运行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:09:31