基于mlr3 R库的Ranger模型网格搜索调参:指定max.depth取值
mlr3verse中Ranger模型网格搜索仅指定特定参数值
问题描述
我使用mlr3verse运行Ranger模型的网格搜索时,希望仅针对max.depth=5和max.depth=10进行搜索,但当前代码会遍历5到10的所有整数(共6个候选参数),代码如下:
task <- TaskClassif$new("df_cont_train.binary", df_cont_train, target = "label", positive = "1") ss = ps( max.depth = p_int(lower = 5, upper = 10) ) instance = ti( task = task, learner = lrn("classif.ranger"), resampling = rsmp("cv", folds = 3), search_space = ss, terminator=trm("none") ) tnr("grid_search")$optimize(instance)
解决方案
只需修改参数空间的定义,直接指定max.depth的候选值即可,有两种简洁的实现方式:
方式1:使用p_int的values参数
直接在p_int中通过values参数传入想要的整数列表,替代原来的lower和upper:
ss = ps( max.depth = p_int(values = c(5, 10)) )
方式2:使用p_fct定义离散参数
将max.depth定义为因子类型,指定候选的数值(内部会自动转换为整数适配模型):
ss = ps( max.depth = p_fct(levels = c("5", "10"), trafo = as.integer) )
修改后运行原有的网格搜索代码,就只会针对max.depth=5和max.depth=10这两个参数值进行交叉验证搜索了。
内容的提问来源于stack exchange,提问作者Little L
相关产品推荐
相关产品推荐

