【发布时间】:2019-05-18 08:49:17
【问题描述】:
我尝试使用来自 mlr 包的 tuneParams() 和 resample() 来仔细检查我的交叉验证 RMSE。
但是,我无法让这 2 个函数产生相同的结果。
通过mlr包调参:
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)
尝试使用重采样功能重现 RMSE:
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)
【问题讨论】:
-
你在做不同的事情——在上面的代码中,你正在调整参数,而在下面的代码中你没有。为什么你期望得到相同的结果?
标签: r cross-validation mlr