H2O提前停止仅限制于ntree吗?

时间:2018-09-29 21:05:08

标签: pyspark h2o

我正在阅读以下两个示例

它们两者都在设置网格搜索时会固定ntree而不是例如提供ntree列表

[i * 100 for i in range(1, 11)]. 

这是我的问题

  1. 我想知道的是,因为针对 ntree?例如,我们可以设置ntree = 1000并 score_tree_interval = 100,那么它可以评估模型 性能从100、200 ...到1000。我正确理解吗?
  2. 但是,如果我的网格搜索中还包含Learn_rate和max_depth。将 提前停止还会根据学习率和最大深度进行评估?一世 在相同数目的树中表示平均值,例如ntree = 500 评估不同的学习率[0.01,0.015,0.025,0.05,0.1], 会停止在学习率列表中吗?
  3. 在 “ stopping_tolerance”(http://docs.h2o.ai/h2o/latest-stable/h2o-docs/data-science/algo-params/stopping_tolerance.html)文档 它描述了“该模型将在达到三级后停止训练 连续对模型的分类错误值进行事件评分 不能提高1e-3”。那么三个得分事件是什么? 他们3个不同数目的树,或者它们可以是相同数目的 树但学习率不同?

1 个答案:

答案 0 :(得分:2)

正如达伦·库克(Darren Cook)在评论中提到的那样,您构建的每个模型都应尽早停止,而对于网格搜索则应尽早停止。

对于单个GBM,通过提前停止(即使用算法中指定的stop_tolerance,stopping_rounds,stopping_metric)来调整ntree(树的数量)。如果您打开流程并查看单个模型的得分历史记录,就可以看到这一点。您会看到树的数量就是x轴。

对于Grid Search,您具有超级参数的添加层。因此,如果您在GBM模型中设置ntrees = 100,并且对学习率= [0.01,0.015]进行网格化,则将建立两个模型,其中ntrees = 100且学习率= 0.01,以及第二个模型ntrees = 100并学习率= 0.015。并且,例如,在第一个模型中,每次迭代将具有不同数量的树,而学习率将是固定的。

因此,请看您的具体问题:

  1. 是的,这是正确的

  2. 网格将查看您的不同学习率(0.01、0.015等)和最大深度之间是否有任何改善。因此,您所说的再次正确。如果使用不同的学习速率和最大深度值没有看到任何改善,则网格将停止(即它将不会继续构建新模型)。

  3. 因此,在这里您需要分离模型和网格搜索。如果在三个得分事件后没有看到任何改善,则单个模型将停止构建(添加树)(并且在此情况下,您的learn_rate和max_depth将被固定,而ntree会发生变化)。然后,我们走到网格,如果在构建的各个模型之间看不到用户指定的改进量,则网格将停止构建新模型。