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

运行H2O AutoML时,如何按数据集ID编号进行分组?

处理H2O纵向数据集的ID分组问题

核心调整步骤

1. 预处理阶段:将ID转为因子并转为H2O框架

纵向数据中的ID是个体标识,需要先转为因子类型,让H2O的模型能识别同一ID的关联记录,捕捉个体间的差异。代码如下:

# 将ID列转为因子
train_long2$ID <- as.factor(train_long2$ID)
# 转换为H2O格式数据集
train_long2_h2o <- as.h2o(train_long2)

2. 关键优化:避免交叉验证的数据泄露

纵向数据中同一ID的多条记录高度相关,不能让它们被分到不同的交叉验证折叠中(否则模型会提前接触到测试数据,导致性能评估失真)。需要手动生成按ID分层的折叠列:

set.seed(1)
# 按ID分组分配折叠号,确保同一ID的所有记录在同一个fold
fold_assignments <- train_long2 %>%
  distinct(ID) %>%
  mutate(fold = sample(1:5, n(), replace = TRUE)) %>%
  right_join(train_long2, by = "ID")

# 将折叠列加入H2O数据集
train_long2_h2o$fold <- as.factor(fold_assignments$fold)

3. 调整AutoML代码

不用改动原有核心参数,只需替换自动交叉验证为手动指定的折叠列,同时保留ID作为特征输入:

aml <- h2o.automl(y = "age", 
                  training_frame = train_long2_h2o, 
                  max_models = 300, 
                  stopping_metric = "MSE", 
                  # 使用手动生成的折叠列,替代自动nfolds
                  fold_column = "fold", 
                  seed = 1, 
                  include_algos = "GBM", 
                  sort_metric = "MSE", 
                  keep_cross_validation_predictions = TRUE)

额外说明

  • 保留ID作为特征:GBM会将ID因子作为分类特征学习,捕捉不同个体的基线年龄差异,更贴合纵向数据的个体特异性。
  • 若不手动设置折叠列,默认的交叉验证会打破ID分组,导致模型性能被高估。

内容的提问来源于stack exchange,提问作者anonymous

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 04:48:32