plotTuneMultiCritResult 不适用于 TuneMultiCritControlMBO
plotTuneMultiCritResult does not work with TuneMultiCritControlMBO
我正在尝试绘制 TuneMultiCritResult
对象的 Pareto 前沿,使用 class 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$ind
和res$opt.path
来打印正面,所以显示出奇怪的结果。
我认为正确的做法是将对象 res$mbo.result$opt.path
的优化路径复制到 res$opt.path
中,但我的问题是:在 [= 中具有不同的优化路径有什么意义16=] 和 res$mbo.result$opt.path
?
谢谢!!
维克多
使用 mlr_2.13
和 mlrMBO_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
我正在尝试绘制 TuneMultiCritResult
对象的 Pareto 前沿,使用 class 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$ind
和res$opt.path
来打印正面,所以显示出奇怪的结果。
我认为正确的做法是将对象 res$mbo.result$opt.path
的优化路径复制到 res$opt.path
中,但我的问题是:在 [= 中具有不同的优化路径有什么意义16=] 和 res$mbo.result$opt.path
?
谢谢!! 维克多
使用 mlr_2.13
和 mlrMBO_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