我正在阅读以下两个示例
- https://github.com/h2oai/h2o-3/blob/master/h2o-docs/src/product/tutorials/gbm/gbmTuning.ipynb
- https://h2o-release.s3.amazonaws.com/h2o/rel-turing/10/docs-website/h2o-docs/grid-search.html
它们在设置网格搜索时,它都会修复 ntree 而不是例如 ntree 的列表
[i * 100 for i in range(1, 11)].
这是我的问题
- 我想知道是因为提前停止是针对 恩特里?例如,我们可以设置 ntree = 1000 和 score_tree_interval = 100,那么它可以评估模型 性能从 100, 200, ...直到1000。我理解正确吗?
- 但是,如果我的网格搜索还包括learn_rate和max_depth。将 提前停止也评估learn_rate和max_depth?我 在相同数量的树内平均值,例如 ntree = 500,当它 评估不同的学习率[0.01, 0.015, 0.025, 0.05, 0.1], 它会停止在学习率列表中的某个地方吗?
- 在 "stopping_tolerance"文件(http://docs.h2o.ai/h2o/latest-stable/h2o-docs/data-science/algo-params/stopping_tolerance.html( 它描述了"模型将在达到三个后停止训练。 对模型错误经典值的连续事件进行评分 没有改善 1e-3"。那么三个计分事件是什么呢?是 他们 3 不同数量的树,或者他们可以是相同数量的 树但学习率不同?
正如达伦·库克(Darren Cook(在评论中提到的,您构建的每个模型都会提前停止,并提前停止网格搜索。
对于单个GBM,ntrees(树的数量(通过提前停止(即使用算法中指定的stopping_tolerance,stopping_rounds stopping_metric(进行调整。如果您打开流并查看单个模型的评分历史图,则可以看到这一点。您将看到树的数量是 x 轴。
对于网格搜索,您添加了超参数的层。因此,如果您在 GBM 模型中设置 ntree = 100,并且您在学习率 = [0.01, 0.015] 上网格化,您将构建两个模型,一个模型的 ntree = 100 且学习率 = 0.01,另一个模型的 ntree = 100,学习率 = 0.015。例如,在第一个模型中,每次迭代将具有不同数量的树,而学习率将是固定的。
所以看看你的具体问题:
-
是的,这是正确的
-
网格将查看您的不同学习率(0.01、0.015 等(和最大深度之间是否有任何改进。所以你说的又是对的。如果网格在不同的学习率和最大深度值下没有看到任何改进(即它不会继续构建新模型(,网格将停止。
-
所以这里你需要分离模型和网格搜索。如果单个模型在三个评分事件后没有看到改进,它将停止构建(添加树((在这里,您的learn_rate和max_depth将被修复,而 ntree 会发生变化(。然后我们走到网格,如果网格在它构建的各个模型之间没有看到用户指定的改进量,它将停止构建新模型。