Аргумент tuneLength с опцией search = 'random' в каретке не работает - PullRequest
1 голос
/ 02 мая 2019

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

Чтобы установить количество выбранных случайных точек сетки, документ caret говорит использовать параметр tuneLength внутри функции train, но из проведенных мною испытаний кажется, что поезд всегда выполняется на * 1007. * все точки сетки , независимо от значения tuneLength. Фактически , результат в точности эквивалентен полному сканированию поиска.

Здесь следует рабочий пример.

Создание синтетического набора данных с целевым двухфакторным столбцом Class.

require(caret)
require(xgboost)

set.seed(1234)
dt <- twoClassSim(n = 1000)

построить сетку для настройки xgboost модели

grid <- expand.grid(
  nrounds = seq(10, 100, by = 10),
  max_depth = c(1, 5, 10),
  gamma = c(0, 1, 2),
  eta = .01,
  subsample = 1,
  colsample_bytree = 1,
  min_child_weight = 1
)

Это сетка из 90 пунктов.

установить повторную выборку перекрестной проверки и установить опцию случайного поиска по сетке

tc <- trainControl(
  method = 'cv',
  number = 5,
  search = 'random'
)

затем установите модель с параметром tuneLength, равным 2.

fit <- train(x = dt[, setdiff(names(dt),'Class')], y = dt$Class,
             method = 'xgbTree',
             trControl = tc,
             tuneGrid = grid, tuneLength = 2)

Я ожидал получить в результатах только 2 оценки сетки, но вместо этого я получил 90 из них, т.е. настройка выполняется на всех точках сетки , как при полном сканировании сетки.

И это не проблема xgboost, поскольку то же самое происходит, например, с svmRadial.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...