我试图在进行并行计算时使用mlrMBO
来调整超参数。我以前不熟悉并行计算,但是我读过它有助于提高计算速度。但是,当我运行以下代码时,该程序只是挂起。当我不并行运行代码时,仅运行第一次迭代。我不确定自己在做什么错,也找不到任何解决方案。任何帮助都会很棒。
data("PimaIndiansDiabetes2", package = "mlbench")
set.seed(123)
training.samples <- PimaIndiansDiabetes2$diabetes %>%
createDataPartition(p = 0.8, list = FALSE)
train.data <- PimaIndiansDiabetes2[training.samples, ]
test.data <- PimaIndiansDiabetes2[-training.samples, ]
lrn <- makeLearner("classif.xgboost", eval_metric = "auc", predict.type = "prob")
lrn$par.set <- c(lrn$par.set,
makeParamSet(
makeNumericLearnerParam("scale_pos_weight")))
ps <- makeParamSet(
makeNumericParam("eta", lower = 0.001, upper = 0.5),
makeNumericParam("gamma", lower = 0, upper = 5),
makeIntegerParam("max_depth", lower = 3, upper = 6),
makeIntegerParam("min_child_weight", lower = 1, upper = 10),
makeNumericParam("subsample", lower = 0.6, upper = 0.8),
makeNumericParam("colsample_bytree", lower = 0.5, upper = 0.7),
makeIntegerParam("nrounds", lower = 25, upper = 2000),
makeIntegerParam("scale_pos_weight", lower = 30, upper = 100),
makeNumericParam("lambda", lower = -1, upper = 0, trafo = function(x) 10^x),
makeIntegerParam("max_delta_step", lower = 1, upper = 10)
)
task <- makeClassifTask(data = train.data, target = "diabetes", positive = "pos")
mbo.ctrl <- makeMBOControl()
mbo.ctrl <- setMBOControlTermination(mbo.ctrl, iters = 10)
surrogate.lrn <- makeLearner("regr.km", predict.type = "se")
design.mat <- generateRandomDesign(n = 10, par.set = ps)
ctrl <- mlr:::makeTuneControlMBO(learner = surrogate.lrn, mbo.control = mbo.ctrl, mbo.design = design.mat)
# Tuning hyperparameters
parallelStartMulticore(cpus = 24L)
res.mbo <- tuneParams(learner = lrn,
task = task,
resampling = cv10,
par.set = ps,
control = ctrl,
show.info = TRUE,
measures = auc)
parallelStop()
这是控制台中显示的内容:
> res.mbo <- tuneParams(learner = lrn,
+ task = task,
+ resampling = cv10,
+ par.set = ps,
+ control = ctrl,
+ show.info = TRUE,
+ measures = auc)
[Tune] Started tuning learner classif.xgboost for parameter set:
Type len Def Constr Req Tunable Trafo
eta numeric - - 0.001 to 0.5 - TRUE -
gamma numeric - - 0 to 5 - TRUE -
max_depth integer - - 3 to 6 - TRUE -
min_child_weight integer - - 1 to 10 - TRUE -
subsample numeric - - 0.6 to 0.8 - TRUE -
colsample_bytree numeric - - 0.5 to 0.7 - TRUE -
nrounds integer - - 25 to 2e+03 - TRUE -
scale_pos_weight integer - - 30 to 100 - TRUE -
lambda numeric - - -1 to 0 - TRUE Y
max_delta_step integer - - 1 to 10 - TRUE -
With control class: TuneControlMBO
Imputation value: -0
Mapping in parallel: mode = multicore; level = mlrMBO.feval; cpus = 24; elements = 10.