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

如何在mlr3hyperband基础阶段基于paradox实现Sobol/LHS采样?

在mlr3hyperband中实现Sobol/LHS空间填充设计作为自定义采样器

完全可以通过自定义paradox::Sampler对象,在mlr3hyperband的bracket初始阶段使用Sobol序列或LHS这类空间填充设计,具体实现步骤如下:

1. 封装Sobol/LHS为Sampler子类

paradox的generate_design_sobol和generate_design_lhs是生成设计的函数,需要将它们包装成符合Sampler接口的R6类:

首先加载所需包:

library(mlr3)
library(mlr3hyperband)
library(paradox)

实现Sobol采样器

SamplerSobol = R6::R6Class("SamplerSobol",
  inherit = Sampler,
  public = list(
    initialize = function() {
      super$initialize(param_set = ParamSet$new())
    },
    sample = function(n, param_set) {
      generate_design_sobol(param_set, n)$data
    }
  )
)

实现LHS采样器

SamplerLHS = R6::R6Class("SamplerLHS",
  inherit = Sampler,
  public = list(
    initialize = function() {
      super$initialize(param_set = ParamSet$new())
    },
    sample = function(n, param_set) {
      generate_design_lhs(param_set, n)$data
    }
  )
)

2. 在mlr3hyperband中使用自定义采样器

创建Hyperband调优器时,通过sampler参数传入自定义采样器的实例即可:

# 定义任务、带调优参数的学习器
task = tsk("iris")
learner = lrn("classif.rpart", cp = to_tune(1e-4, 1e-1, logscale = TRUE))

# 创建带Sobol采样器的Hyperband调优器
tuner_hb_sobol = tnr("hyperband", sampler = SamplerSobol$new())

# 或者创建带LHS采样器的Hyperband调优器
tuner_hb_lhs = tnr("hyperband", sampler = SamplerLHS$new())

3. 运行调优流程

# 初始化调优实例
instance = ti(
  task = task,
  learner = learner,
  resampling = rsmp("holdout"),
  measure = msr("classif.ce"),
  terminator = trm("evals", n_evals = 50)
)

# 启动调优(以Sobol为例)
tuner_hb_sobol$optimize(instance)

可选:添加自定义配置

如果需要对Sobol/LHS的生成逻辑做定制(比如Sobol跳过初始序列、LHS调整抽样方法),可以在Sampler类中扩展参数:

# 带跳过参数的Sobol采样器
SamplerSobol = R6::R6Class("SamplerSobol",
  inherit = Sampler,
  public = list(
    skip = NULL,
    initialize = function(skip = 1000) {
      super$initialize(param_set = ParamSet$new())
      self$skip = skip
    },
    sample = function(n, param_set) {
      generate_design_sobol(param_set, n, skip = self$skip)$data
    }
  )
)

# 使用时传入自定义参数
tuner_hb_sobol = tnr("hyperband", sampler = SamplerSobol$new(skip = 2000))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 06:45:28