如何在插入符号包中的指定网格中随机搜索?
How to random search in a specified grid in caret package?
我想知道是否可以在预定义的网格中使用随机搜索。例如,我的网格有 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)
一种方法是定义一个网格并使用 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
参数提供。
第二种方法不是从网格中选择随机元素,而是在定义的最小值和最大值之间随机选择数字。
我想知道是否可以在预定义的网格中使用随机搜索。例如,我的网格有 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)
一种方法是定义一个网格并使用 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
参数提供。
第二种方法不是从网格中选择随机元素,而是在定义的最小值和最大值之间随机选择数字。