首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在h2o中分配案例权重以在开发数据上构建gbm create overfit?

在h2o中分配案例权重以在开发数据上构建gbm create overfit?
EN

Stack Overflow用户
提问于 2017-05-08 13:11:13
回答 1查看 320关注 0票数 2

我正在使用h2o构建gbm模型。训练数据随机分为70%的开发数据和30%的及时验证数据。训练数据有1.4%的坏率,我还需要为每个观察值分配权重(数据有一个权重栏)。观察结果是:与无权重构建的模型(VAL)相比,有权重构建的模型在开发数据(DEV)上的性能要高得多。使用权重构建的模型在开发数据和实时验证数据之间存在较大的性能差异。例如,带有权重的模型构建显示低于前10%的捕获率

开发: 56%

验证: 25%

而没有权重的模型构建显示低于前10%的捕获率:

DEV: 35%

验证: 23%

似乎在这种情况下,使用权重对开发和及时验证数据的模型性能都有所帮助。想知道在h2o中权重到底是如何使用的吗?在使用权重的情况下,模型在DEV和VAL上的较大性能差异是否表明在h2o中建立gbm模型的不稳定性更高?

蓝色曲线表示DEV,橙色曲线表示VAL>。对于没有重量的情况,DEV和VAL的对数损失从同一点开始。而对于加权情况,DEV和VAL的对数损失从两个不同的点开始。如何解释这张原木损失图,为什么h2o gbm中的权重在原木损失函数输出中产生了如此大的差异?

EN

回答 1

Stack Overflow用户

发布于 2017-05-08 15:46:50

如果没有更多的信息(例如实际数据),我的猜测是您看到的起始点差距是随机噪声。

为了进一步研究这一点,我建议首先尝试不同的随机种子。我喜欢使用h2o.grid来实现这一点,使seed成为一个超参数。只需3到4个不同的值就可以让你很好地感受到随机性对模型的影响程度。

我要尝试的第二件事是不同的训练/有效拆分。同样,显式地给split函数一个种子,这样你就可以得到可重复的结果。如果你的数据集相当小,我希望这是一个更大的因素。

把这两个想法放在一起:(粗略的代码)

代码语言:javascript
复制
for split_seed in [1,1103,4387]:
  split data using seed
  h2o.grid(
    algorithm = "gbm",
    grid_id = "ww" + split_seed,
    hyper_params = list(
      seed = [77,800,2099]
      ),
    ...(with weights)...
    )
  h2o.grid(
    algorithm = "gbm",
    grid_id = "wo" + split_seed,
    hyper_params = list(
      seed = [77,800,2099]
      ),
    ...(without weights)...
    )

我的猜测是,如果你用权重覆盖9分历史图表,并将它们与没有权重的9分历史图表进行比较,你会看到每个图表上都有类似数量的模糊度。

如果你总是/永远不会得到所有9个的起始差距,取决于有/没有权重,那么一些更有趣的事情正在发生,我希望你能提供足够的数据和代码,以便其他人可以重现它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43840178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档