R - mlr - В чем разница между Benchmark и Resample при поиске гиперпараметров - PullRequest
1 голос
/ 17 октября 2019

Я ищу оптимальные настройки гиперпараметров и понимаю, что в MLR могу сделать это обоими способами. эталонная функция и функция повторной выборки. Какая разница между двумя?

Если бы я делал это с помощью бенчмарка, я мог бы сравнить несколько моделей и извлечь настроенные параметры, что является преимуществом перед повторной выборкой. Вместо этого, если бы я использовал повторную выборку, я мог бы настраивать только одну модель за раз, и я также заметил, что мой процессор взлетел до небес.

как и когда я должен использовать одну над другой?

data(BostonHousing, package = "mlbench")

BostonHousing$chas <- as.integer(levels(BostonHousing$chas))[BostonHousing$chas]

library('mlr')
library('parallel')
library("parallelMap")

# ---- define learning tasks -------
regr.task = makeRegrTask(id = "bh", data = BostonHousing, target = "medv")

# ---- tune Hyperparameters -------- 

set.seed(1234)

# Define a search space for each learner'S parameter
ps_xgb = makeParamSet(
  makeIntegerParam("nrounds",lower=5,upper=50),
  makeIntegerParam("max_depth",lower=3,upper=15),
  # makeNumericParam("lambda",lower=0.55,upper=0.60),
  # makeNumericParam("gamma",lower=0,upper=5),
  makeNumericParam("eta", lower = 0.01, upper = 1),
  makeNumericParam("subsample", lower = 0, upper = 1),
  makeNumericParam("min_child_weight",lower=1,upper=10),
  makeNumericParam("colsample_bytree",lower = 0.1,upper = 1)
)

# Choose a resampling strategy
rdesc = makeResampleDesc("CV", iters = 5L)

# Choose a performance measure
meas = rmse

# Choose a tuning method
ctrl = makeTuneControlRandom(maxit = 30L)

# Make tuning wrappers
tuned.lm = makeLearner("regr.lm")
tuned.xgb = makeTuneWrapper(learner = "regr.xgboost", resampling = rdesc, measures = meas,
                           par.set = ps_xgb, control = ctrl, show.info = FALSE)

# -------- Benchmark experiements -----------
# Four learners to be compared
lrns = list(tuned.lm, tuned.xgb)

#setup Parallelization 
parallelStart(mode = "socket", #multicore #socket
              cpus = detectCores(),
              # level = "mlr.tuneParams",
              mc.set.seed = TRUE)

# Conduct the benchmark experiment
bmr = benchmark(learners = lrns, 
                tasks = regr.task,
                resamplings = rdesc,
                measures = rmse, 
                keep.extract = T,
                models = F,
                show.info = F)

parallelStop()

# ------ Extract HyperParameters -----
bmr_hp <- getBMRTuneResults(bmr)
bmr_hp$bh$regr.xgboost.tuned[[1]]


res <-
  resample(
    tuned.xgb,
    regr.task,
    resampling = rdesc,
    extract = getTuneResult, #getFeatSelResult, getTuneResult
    show.info = TRUE,
    measures = meas
  )

res$extract

Ответы [ 2 ]

2 голосов
/ 17 октября 2019

Сравнительный анализ и повторная выборка являются ортогональными понятиями - вы можете использовать как независимо, так и вместе друг с другом.

Повторная выборка обеспечивает надлежащую оценку изученных моделей. В частности, мы не хотим оценивать изученную модель, предоставляя ей те же данные, которые мы использовали для обучения, потому что тогда модель могла бы просто запомнить данные и казаться идеальной моделью. Вместо этого мы оцениваем его по разным неконтролируемым данным, чтобы увидеть, усвоил ли он общую концепцию и способен ли делать хорошие прогнозы и по невидимым данным. Повторная выборка определяет, как происходит это разделение на данные об обучении и тестировании, сколько итераций различных разделений об обучении и тестировании и т. Д.

Сравнительный анализ позволяет сравнивать разных учащихся по разным задачам. Это удобный способ проведения крупномасштабных сравнительных экспериментов, которые в противном случае вам пришлось бы выполнять вручную, объединяя всех учащихся и все задачи, тренируя и оценивая модели и следя за тем, чтобы все происходило точно так же. Чтобы определить производительность учащегося и модели, которые он применяет для выполнения определенной задачи, используется стратегия повторной выборки, как описано выше.

Короче говоря, ответ на ваш вопрос заключается в использовании повторной выборки, когда вы хотитеоцените эффективность изученной модели и сравнительный анализ с повторной выборкой, если вы хотите сравнить показатели разных учащихся по различным задачам.

1 голос
/ 17 октября 2019

Если бы я делал это с помощью теста, я мог бы сравнить несколько моделей и извлечь настроенные параметры, что является преимуществом перед повторной выборкой.

Вы также можете сделать это, используя resample().


benchmark() - это просто оболочка вокруг resample(), облегчающая проведение экспериментов с несколькими заданиями / учащимися / повторными выборками.

...