我正在阅读以下两个示例
它们两者都在设置网格搜索时会固定ntree而不是例如提供ntree列表
[i * 100 for i in range(1, 11)].
这是我的问题
答案 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。并且,例如,在第一个模型中,每次迭代将具有不同数量的树,而学习率将是固定的。
因此,请看您的具体问题:
是的,这是正确的
网格将查看您的不同学习率(0.01、0.015等)和最大深度之间是否有任何改善。因此,您所说的再次正确。如果使用不同的学习速率和最大深度值没有看到任何改善,则网格将停止(即它将不会继续构建新模型)。
因此,在这里您需要分离模型和网格搜索。如果在三个得分事件后没有看到任何改善,则单个模型将停止构建(添加树)(并且在此情况下,您的learn_rate和max_depth将被固定,而ntree会发生变化)。然后,我们走到网格,如果在构建的各个模型之间看不到用户指定的改进量,则网格将停止构建新模型。