plotTuneMultiCritResult不适用于TuneMultiCritControlMBO

时间:2018-12-26 12:32:41

标签: mlr

我正在尝试绘制TuneMultiCritResult对象的Pareto前端,并通过类TuneMultiCritControlMBO的控制对象进行了调整:

# multi-criteria optimization of (tpr, fpr) with MBO
lrn =  makeLearner("classif.ksvm")
rdesc = makeResampleDesc("Holdout")
ps = makeParamSet(
  makeNumericParam("C", lower = -12, upper = 12, trafo = function(x) 2^x),
  makeNumericParam("sigma", lower = -12, upper = 12, trafo = function(x) 2^x)
)
ctrl = makeTuneMultiCritControlMBO()
res = tuneParamsMultiCrit(lrn, sonar.task, rdesc, par.set = ps,
  measures = list(tpr, fpr), control = ctrl)

打印对象res提供以下信息:

> res
Tune multicrit result:
Points on front: 14
> res$ind
 [1]  1  2  4  5  6  7  9 11 12 14 15 16 17 18

但是res$opt.path中保存的优化路径的长度只有10点,我猜是MBO提出的。

> res$opt.path
Optimization path
  Dimensions: x = 2/2, y = 2
  Length: 10
  Add x values transformed: FALSE
  Error messages: TRUE. Errors: 0 / 10.
  Exec times: TRUE. Range: 0.031 - 0.041. 0 NAs.

由于函数plotTuneMultiCritResult依赖于对象res$indres$opt.path来打印正面,因此显示奇怪的结果。

我认为正确的方法是将对象res$mbo.result$opt.path的优化路径复制到res$opt.path中,但是我的问题是:在{{1}中具有不同的优化路径有什么意义? }和res$opt.path

谢谢!! 维克多

1 个答案:

答案 0 :(得分:1)

使用mlr_2.13mlrMBO_1.1.3以及以下代码,一切正常。我建议您使用MBO Control对象来指定优化应具有的迭代次数。否则,将使用默认值(初始设计为4 * d评估+ 10次迭代)。

set.seed(1)
library(mlr)
library(mlrMBO)
# multi-criteria optimization of (tpr, fpr) with MBO
lrn =  makeLearner("classif.ksvm")
rdesc = makeResampleDesc("Holdout")
ps = makeParamSet(
  makeNumericParam("C", lower = -12, upper = 12, trafo = function(x) 2^x),
  makeNumericParam("sigma", lower = -12, upper = 12, trafo = function(x) 2^x)
)
mbo.ctrl = makeMBOControl(n.objectives = 2)
mbo.ctrl = setMBOControlTermination(mbo.ctrl, iters = 20)
ctrl = makeTuneMultiCritControlMBO(n.objectives = 2)
res = tuneParamsMultiCrit(lrn, sonar.task, rdesc, par.set = ps,
                          measures = list(tpr, fpr), control = ctrl)
plotTuneMultiCritResult(res = res, path = FALSE) # path = FALSE would only shows the Pareto Front