plotTuneMultiCritResult не работает с TuneMultiCritControlMBO - PullRequest
0 голосов
/ 26 декабря 2018

Я пытаюсь построить фронт Парето объекта TuneMultiCritResult, настроенного на объект управления класса 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, но мой вопрос: какой смысл иметь разные пути оптимизации в res$opt.path и res$mbo.result$opt.path?

Спасибо !!Виктор

1 Ответ

0 голосов
/ 07 января 2019

Используя mlr_2.13 и mlrMBO_1.1.3 и следующий код, все работает как ожидалось.Я предполагаю, что вы используете объект управления MBO, чтобы указать, сколько итераций должно пройти при оптимизации.В противном случае будет использоваться значение по умолчанию (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
...