1

The docs for makeModelMultiplexerParamSet the the mlr R package state that named ParamSets can be provided to disambiguate which parameters go to which learner, but the docs don't include an example of how to do that. I've tried a few things (such as what is shown below), but I can get makeModelMultiplexerParamSet to work. Any help would be appreciated.

base.learners = list(
  makeLearner("classif.ksvm",  predict.type = 'prob'),
  makeLearner("classif.randomForest",  predict.type = 'prob', ntree=500L),
  makeLearner('classif.xgboost', predict.type = 'prob', nthread=2, nrounds=1000L)
)
lrn = makeModelMultiplexer(base.learners)

# learners
ps = list(
  classif.randomForest = makeParamSet(makeIntegerParam("mtry", lower=1L, upper=100L)),
  classif.ksvm = makeParamSet(makeNumericParam("C", lower = 0.01, upper = 0.1),
                   makeNumericParam("sigma", lower = 0.005, upper = 0.5, trafo = function(x) 2^x)),            
  classif.xgboost = makeParamSet(makeIntegerParam("max_depth", lower=1L, upper=100L),
                      makeNumericParam("eta", lower=0.05, upper=0.5),
                      makeNumericParam("gamma", lower=0, upper=1))
)

ps = makeModelMultiplexerParamSet(lrn, ps)

The error:

Error in FUN(X[[i]], ...): List args has element of wrong type list at position 1. Should be: ParamSet
Traceback:
1. makeModelMultiplexerParamSet(lrn, ps)
2. checkListElementClass(args, "ParamSet")
3. lapply(seq_along(xs), function(i) {
 .     x = xs[[i]]
 .     if (!(is(x, cl))) 
 .         stop("List ", s, " has element of wrong type ", class(x)[1L], 
 .             " at position ", i, ". Should be: ", cl)
 . })
4. FUN(X[[i]], ...)
5. stop("List ", s, " has element of wrong type ", class(x)[1L], 
 .     " at position ", i, ". Should be: ", cl)
sharchaea
  • 743
  • 1
  • 6
  • 16
  • Try this approach: https://www.rdocumentation.org/packages/mlr/versions/2.17.1/topics/makeModelMultiplexer . It's very similar to what you've got, but wraps the makeParams with `makeModelMultiplexerParamSet()`; e.g. `ps = makeModelMultiplexerParamSet(lrn, classif.ksvm = makeParamSet( makeNumericParam("sigma", lower = -10, upper = 10, trafo = function(x) 2^x) ), classif.randomForest = makeParamSet( makeIntegerParam("ntree", lower = 1L, upper = 500L) ) )` – jared_mamrot May 10 '20 at 10:12
  • That did it! Thanks @jared_mamrot – sharchaea May 10 '20 at 11:35
  • Brilliant - I'll write the solution as an answer then – jared_mamrot May 10 '20 at 12:02

1 Answers1

1

This approach solved the problem: https://www.rdocumentation.org/packages/mlr/versions/2.17.1/topics/makeModelMultiplexer

Wrap makeParams with makeModelMultiplexerParamSet(); e.g. ps = makeModelMultiplexerParamSet(lrn, classif.ksvm = makeParamSet( makeNumericParam("sigma", lower = -10, upper = 10, trafo = function(x) 2^x) ), classif.randomForest = makeParamSet( makeIntegerParam("ntree", lower = 1L, upper = 500L) ) )

jared_mamrot
  • 22,354
  • 4
  • 21
  • 46