我想知道是否可以在预定义的网格中使用随机搜索。例如,对于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))
和alpha
。 lambda
在0到1之间,glmnet
在-10到10之间。我想使用5次随机搜索来随机尝试此范围内的点。我为网格搜索编写了以下代码,并且可以正常工作,但是我无法在一定范围内对其进行修改以进行随机搜索。
alpha
答案 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
参数提供。
第二种方法不是从网格中选择随机元素,而是从定义的最小值和最大值之间随机抽取数字。