Как выполнить случайный поиск по указанной сетке в каретном пакете? - PullRequest
0 голосов
/ 11 декабря 2018

Интересно, можно ли использовать случайный поиск в предопределенной сетке.Например, моя сетка имеет alpha и lambda для glmnet метода.alpha находится в диапазоне от 0 до 1, а lambda находится в диапазоне от -10 до 10. Я хочу использовать случайный поиск 5 раз, чтобы случайным образом попробовать точки в этой границе.Я написал следующий код для поиска по сетке, и он отлично работает, но я не могу изменить его для случайного поиска в пределах.

rand_ctrl <- trainControl(method = "repeatedcv", repeats = 5,
                          search = "random")
grid <- expand.grid(alpha=seq(0,1,0.1),lambda=seq(-10,10,1)) # I think this should be modified
rand_search <- train(Response ~ ., data = train_dat,
                     method = "glmnet",
                     ## Create 20 random parameter values
                     metric = "RMSE",
                     tuneLength = 5,
                     preProc = c("scale"),
                     tuneGrid = grid,
                     trControl = rand_ctrl)

1 Ответ

0 голосов
/ 11 декабря 2018

Один из подходов состоит в том, чтобы определить сетку и использовать sample для выбора нескольких случайных строк:

set.seed(1)
samp <- sample(1:nrow(grid), 5)
grid[samp,]
#output
    alpha lambda
62    0.6     -5
86    0.8     -3
132   1.0      1
208   0.9      8
46    0.1     -6

, а затем использовать это подмножество в качестве tuneGrid аргумента

Другой подход будетиспользовать runif, который генерирует случайные числа из равномерного распределения, определяемого нижней и верхней границами:

set.seed(1)
data.frame(alpha = runif(5, 0 , 1),
           lambda = runif(5, -10, 10))
#output
      alpha    lambda
1 0.2655087  7.967794
2 0.3721239  8.893505
3 0.5728534  3.215956
4 0.9082078  2.582281
5 0.2016819 -8.764275

и предоставлять это как аргумент tuneGrid.

Второй подход невыбрать случайные элементы из сетки, а скорее случайные числа между определенным минимумом и максимумом.

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