J'essaie d'utiliser le paquetage MLR pour régler les hyper-paramètres d'un arbre de décision construit avec le paquet rpart. Même si je peux ajuster les paramètres de base de l'arbre de décision (par exemple minsplit
, maxdepth
et ainsi de suite), je ne suis pas en mesure de définir correctement les valeurs du paramètre param
. Plus précisément, je voudrais essayer différents priors
dans la recherche de grille.Réglage des paramètres dans rpart avec le package MLR?
Voici le code que j'écrit (dat
est le dataframe J'utilise, et target
est ma variable de classe):
# Create a task
dat.task = makeClassifTask(id = "tree", data = dat, target = "target")
# Define the model
resamp = makeResampleDesc("CV", iters = 4L)
# Create the learner
lrn = makeLearner("classif.rpart")
# Create the grid params
control.grid = makeTuneControlGrid()
ps = makeParamSet(
makeDiscreteParam("cp", values = seq(0.001, 0.006, 0.002)),
makeDiscreteParam("minsplit", values = c(1, 5, 10, 50)),
makeDiscreteParam("maxdepth", values = c(20, 30, 50)),
makeDiscreteParam("parms", values = list(prior=list(c(.6, .4),
c(.5, .5))))
)
Lorsque je tente d'exécuter l'accord, avec:
# Actual tuning, with accuracy as evaluation metric
tuned = tuneParams(lrn, task = dat.task,
resampling = resamp,
control = control.grid,
par.set = ps, measures = acc)
Je reçois l'erreur
Error in get(paste("rpart", method, sep = "."), envir = environment())(Y, : The parms list must have names
J'ai essayé aussi de définir parms
comme UntypedParam
avec
makeUntypedParam("parms", special.vals = list(prior=list(c(.6, .4), c(.5,.5))))
En effet, en tapant getParamSet("classif.rpart")
, il me semble que l'accord accepte une « variable non typée » plutôt que discret.
Cependant, lorsque je tente cela, je reçois l'erreur:
Error in makeOptPath(par.set, y.names, minimize, add.transformed.x, include.error.message, :
OptPath can currently only be used for: numeric,integer,numericvector,integervector,logical,logicalvector,discrete,discretevector,character,charactervector
Quelqu'un peut-il aider?
Parfait, merci! – aprospero