I try using tuneParams() and resample(), both of which are from mlr package, to double check my cross-validation RMSE.
However, I could not get the 2 functions to yield the same result.
Tune parameters by mlr package:
train <- cars
invisible(library(mlr))
invisible(library(mlrMBO))
invisible(library(doParallel))
set.seed(0)
# Leaner
lrn <- makeLearner("regr.xgboost", par.vals = list(eta = 0.3, objective = "reg:linear"))
lrn <- makePreprocWrapperCaret(lrn, ppc.scale = TRUE, ppc.center = TRUE)
# Task
task <- makeRegrTask(data = train, target = "dist")
# Resampling strategy
cv_desc <- makeResampleDesc('CV', iters = 4)
cv_inst <- makeResampleInstance(cv_desc, task = task)
# Parameter set
ps <- makeParamSet(
makeIntegerParam("nrounds", lower = 30, upper = 60),
makeNumericParam("lambda", lower = 0, upper = 1),
makeNumericParam("alpha", lower = 0, upper = 1)
)
# Control
mbo.ctrl <- makeMBOControl()
mbo.ctrl <- setMBOControlTermination(mbo.ctrl, iters = 50)
ctrl <- mlr:::makeTuneControlMBO(mbo.control = mbo.ctrl)
# Tune model:
cl <- makeCluster(detectCores(), type='PSOCK')
registerDoParallel(cl)
params_res <- tuneParams(lrn, task, cv_inst, par.set = ps, control = ctrl,
show.info = FALSE, measures = mlr::rmse)
registerDoSEQ()
print(params_res)
Attempt to reproduce the RMSE with resample function:
set.seed(0)
lrn <- makeLearner("regr.xgboost", par.vals = params_res$x)
lrn <- makePreprocWrapperCaret(lrn, ppc.scale = TRUE, ppc.center = TRUE)
r = resample(lrn, task, cv_inst, measures = mlr::rmse)
mean(r$measures.test$rmse)