首页 > 解决方案 > R H20 - 分层抽样和非独立同分布行的交叉验证

问题描述

我正在使用 H2O 分析数据集,但我不确定如何正确地对我的数据集执行交叉验证。我有一个不平衡的数据集,所以我想执行分层交叉验证(输出变量是否用于平衡每个分区上的组)。

但是,最重要的是,我还有一个问题,即我的许多行都是重复的(一种在没有实际权重的情况下实现权重的方法)。独立于这个问题的来源,我之前已经看到,在某些情况下,如果某些行必须保持在一起,您可以进行交叉验证。这似乎是 fold_column 的用法。但是,不可能同时做这两个吗?

如果没有 H2O 解决方案,我如何计算先验折叠并将其用于 H2O?

标签: rcross-validationh2o

解决方案


根据H2O-3 文档,这是无法做到的:

请注意,所有三个选项仅适用于 iid 的数据集。如果数据集需要自定义分组以执行有意义的交叉验证,则应创建并提供 fold_column。

一个快速的想法是使用weights_column而不是复制行。然后两者balance_classesweights_column都可以作为 GBM、DRF、深度学习、GLM、朴素贝叶斯和 AutoML 中的参数使用。

否则,我建议在 R 或 H2O 中对您的数据执行以下工作流程,以实现折叠分配和折叠之间重复的一致性:

  1. 获取原始数据集(数据中没有重复)
  2. 根据结果​​字段(不平衡的一组)将其分为两组:一组表示正数,一组表示负数(如果它是多项式,则具有与结果一样多的组)
  3. foldId通过在两个集合中独立分配新列,将每个集合分成 N 个折叠:这实现了分层折叠
  4. 将 ( rbind) 两个集合重新组合在一起
  5. 应用实现权重的行复制过程(现在将自动保留您的折叠分配)。

推荐阅读