如何在插入符包中的指定网格中随机搜索?

时间:2018-12-11 03:11:21

标签: r regression r-caret training-data hyperparameters

我想知道是否可以在预定义的网格中使用随机搜索。例如,对于mydf[] <- lapply(mydf, function(x) codetable$translation[match(x, codetable$code)]) mydf # a b c #1 H F F #2 H F J #3 A I I #4 H G C #5 A E G #6 G D H #7 J G C #8 H B G #9 J I F #10 C I B #..... 方法,我的网格具有set.seed(234) mydf <- data.frame(a=sample(1:10, 20, replace=T), b=sample(1:10, 20, replace=T), c=sample(1:10, 20, replace=T)) alphalambda在0到1之间,glmnet在-10到10之间。我想使用5次随机搜索来随机尝试此范围内的点。我为网格搜索编写了以下代码,并且可以正常工作,但是我无法在一定范围内对其进行修改以进行随机搜索。

alpha

1 个答案:

答案 0 :(得分:1)

一种方法是定义一个网格并使用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参数提供。

第二种方法不是从网格中选择随机元素,而是从定义的最小值和最大值之间随机抽取数字。