You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言mlr包makeParamSet如何设置超参数按指定步长调参

mlr包makeParamSet设置固定步长超参数的实现方法

使用makeParamSet完全可以实现ntree按50为步长取值的调优需求,无需额外引入其他工具,有两种成熟实现方案:

  • 方案1:直接定义离散参数(推荐,逻辑简单不易出错)
    原代码中使用makeIntegerParam定义连续整数区间,才会导致调优时遍历区间内所有整数。你可以直接替换为makeDiscreteParam,显式指定所有需要评估的ntree候选值即可,修改后的参数集代码如下:
    rf_param <- makeParamSet(
      makeDiscreteParam("ntree", values = seq(50, 500, by = 50)),  
      makeIntegerParam("mtry", lower = floor((ncol(train)-1)/5), upper = ncol(train)),
      makeIntegerParam("nodesize", lower = 10, upper = 30),
      makeIntegerParam("maxnodes", lower = 1, upper = 100)
    )
    
    该写法下,调优器只会从50、100、150……500这10个预设值中搜索最优ntree,不会遍历区间内其他整数。
  • 方案2:整数参数配转换函数(适合候选值数量多、不想手动枚举的场景)
    如果后续需要调整步长、候选值较多不想手动枚举,也可以通过参数转换(trafo)实现步长控制:先定义一个小范围的整数索引参数,再通过转换规则将索引映射为目标步长的参数值,代码如下:
    rf_param <- makeParamSet(
      makeIntegerParam("ntree_ind", lower = 1, upper = 10),
      makeIntegerParam("mtry", lower = floor((ncol(train)-1)/5), upper = ncol(train)),
      makeIntegerParam("nodesize", lower = 10, upper = 30),
      makeIntegerParam("maxnodes", lower = 1, upper = 100),
      .trafo = function(x, param_set) {
        x$ntree <- x$ntree_ind * 50
        x$ntree_ind <- NULL
        return(x)
      }
    )
    
    该写法调优时搜索的是1-10的整数索引,实际传入随机森林模型的ntree参数会自动按步长50转换,最终效果和方案1完全一致。

注意:旧版mlr包(非mlr3)的makeIntegerParam函数原生不支持步长(step)参数,不要直接在函数内传step参数避免报错。

内容的提问来源于stack exchange,提问作者kris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 01:45:43