Я пытаюсь настроить модель с помощью 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
.