【问题标题】:cross validation and early stopping交叉验证和提前停止
【发布时间】:2018-05-17 11:16:54
【问题描述】:

我试图确保我不会对 h2o 如何与交叉验证和验证数据集一起使用感到困惑。我确定我只是对用于描述这一点的措辞感到困惑

    library(mlbench)
   library(h2o)

data(Sonar)
dfh2o = as.h2o(Sonar)
splits=h2o.splitFrame(dfh2o)

train = splits[[1]]
valid = splits[[2]]

gbm_no_val_frame <- h2o.gbm(x = colnames(df), y = "Class", training_frame = train,
                         nfolds = 5, seed = 1234, ntrees  = 4000, stopping_rounds = 5)


gbm_val_frame <- h2o.gbm(x = colnames(df), y = "Class", training_frame = train, validation_frame = valid,
                    nfolds = 5, seed = 1234, ntrees  = 4000, stopping_rounds = 5)            

   h2o.flow()  ### to see the validation frame stopping under models.
  1. 在 gbm_no_val_frame 中用于提前停止的验证帧是什么?这如何停止以防止过度拟合?

  2. 我想我了解 gbm_val_frame 的工作原理 - 当训练的折叠/最终模型碰到“有效”框架时,当分数停止提高时,它会停止过度拟合?

只是想消除我在这里的任何疑问..

【问题讨论】:

    标签: r validation cross-validation h2o


    【解决方案1】:

    提前停止在这里究竟是如何工作的?

    你的假设是正确的。提前停止将用于每个 CV 模型,然后用于最终模型。

    如果我在这里删除验证集,...

    您没有在示例中指定验证数据集。相反,您通过设置 nfolds 来请求交叉验证。

    如果您删除 nfolds 并且未指定 validation_frame,它将使用 training 数据集上的分数来评估何时应该停止提前停止。当您使用 GBM 时,这实际上意味着它不会提前停止:在添加每棵额外的树后,GBM 总会变得更好。

    所以,是的,请始终指定validation_framenfolds

    基于代码编辑的更新

    gbm_no_val_frame:对于5折中的每一个,1/5的数据作为验证框。 最终模型是使用所有数据构建的。它只会间接使用提前停止:它会忽略您提供的ntrees 的值,而是使用 5 个 cv 模型最终使用的平均树数。 (来源:我的书第 102 页的顶部,但它也在 GBM 常见问题解答中。)

    关于您的第二个问题,我对the FAQ 的阅读表明,以上仍然是提前停止的工作原理,验证集仅用于为您提供额外的统计信息。

    (对于 GBM,我认为这很好;对于深度学习,进展是随机的并且可能会更加嘈杂,我发现每个折叠的早期停止点可能完全不同,并且对于决定提前停止最终模型;所以我一般不喜欢使用nfolds,而只使用validation_frame)

    【讨论】:

    • 抱歉 - 我的意思是如果我删除了 validation_frame 但保留了 nfolds。还是一样的交易?
    • @runningbirds 我们可能在谈论不同的目的,但您目前没有在代码中使用 validation_frame(您展示了)。通常您应该使用 nfolds 或 validation_frame,避免不指定其他...并且通常同时使用 nfolds 和 validation_frame 是多余的。
    • Darren Cook - 我将编辑我的代码,因为我不确定我是否明白我的意思 - 给我 3 分钟
    猜你喜欢
    • 2021-05-08
    • 2016-03-29
    • 2020-02-06
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多