xgboost-使用mlrMBO挂起进行超参数调整

时间:2019-12-19 20:02:15

标签: r xgboost mlr

我试图在进行并行计算时使用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.

0 个答案:

没有答案