R中createFolds的随机样本
Random samples from createFolds in R
我想将我的数据集分成 30 份。所以我使用了 R 中 caret
包中的 createFolds
函数。我 set.seed
得到了可重现的结果。
现在,我想要 20 个不同的随机样本。也就是说,20个不同的30折。因此,我需要更改 set.seed
20 次。
有没有办法让这更容易。
wdbcc=as.data.frame(scale(wdbc))
set.seed(12345)
k = 30
folds <- createFolds(wdbcc$PE, k = k, list = TRUE, returnTrain = TRUE)
注意
wdbcc
是我的数据集,k
是折叠数,PE
是因变量。
EDIT1
下面我简单举例说明我想要什么
首先我会使用下面的set.seed
wdbcc=as.data.frame(scale(wdbc))
set.seed(12345)
k = 30
folds <- createFolds(wdbcc$PE, k = k, list = TRUE, returnTrain = TRUE)
然后,我将在拆分为
的折叠上构建模型
lm = list()
for (i in 1:k) {
lm[[i]] = lm(PE~ ., data = wdbcc[folds[[i]],])
}
然后,我将使用相同的想法,但将 set.seed 更改为 (123456) 而不是 (12345),并以此为基础构建模型。
我需要用不同的 set.seed 重复 20 次。每次在不同的 set.seed.
上构建模型
EDIT2
简单地说,如果我有 30 次折叠,我将在这 30 次折叠上建立线性回归,因此我将有 30 个模型结果。我需要有相同的过程,但有不同的 30 次折叠(20 次,20 次中的每一次我都有不同的 30 次折叠)所以,我将在 30 次不同的折叠中每次构建模型。
folds <- replicate(20,createFolds(wdbcc$PE, k = k, list = FALSE, returnTrain = TRUE))
如果您不介意将折叠放在向量(矩阵的列)中而不是列表中。
编辑: 我上面的代码已经确保了种子随机数,因为每次你 运行 上面的代码你都会得到相同的折叠(全部 20 个)用给定的种子。但是,如果您绝对希望每个重采样都有一个特定的种子(这是可疑的),您可以执行以下操作
wdbcc=as.data.frame(scale(wdbc))
lmv = vector("list",20)
mySeed=c(1,2,3,4,5,...,20) #vector with your pre-defined seeds
for (i in 1:length(lmv)) {
set.seed(mySeed[i])
lmv2 = vector("list",30)
folds <- createFolds(wdbcc$PE, k = 30, list = FALSE, returnTrain = TRUE)
for (j in 1:length(lmv2)) {
lmv2[[j]] = lm(PE~ ., data = wdbcc[folds!=j,])
}
lmv[[i]] = lmv2
}
createFolds 可能无法按预期工作:
folds <- replicate(20,createFolds(wdbcc$PE, k = k, list = FALSE, returnTrain = TRUE))
只有当 list = TRUE 时,它才会 return 火车,根据文档:
returnTrain a logical. When true, the values returned are the sample positions corresponding to the data used during training. This argument only works in conjunction with list = TRUE
我想将我的数据集分成 30 份。所以我使用了 R 中 caret
包中的 createFolds
函数。我 set.seed
得到了可重现的结果。
现在,我想要 20 个不同的随机样本。也就是说,20个不同的30折。因此,我需要更改 set.seed
20 次。
有没有办法让这更容易。
wdbcc=as.data.frame(scale(wdbc))
set.seed(12345)
k = 30
folds <- createFolds(wdbcc$PE, k = k, list = TRUE, returnTrain = TRUE)
注意
wdbcc
是我的数据集,k
是折叠数,PE
是因变量。
EDIT1
下面我简单举例说明我想要什么
首先我会使用下面的set.seed
wdbcc=as.data.frame(scale(wdbc))
set.seed(12345)
k = 30
folds <- createFolds(wdbcc$PE, k = k, list = TRUE, returnTrain = TRUE)
然后,我将在拆分为
的折叠上构建模型 lm = list()
for (i in 1:k) {
lm[[i]] = lm(PE~ ., data = wdbcc[folds[[i]],])
}
然后,我将使用相同的想法,但将 set.seed 更改为 (123456) 而不是 (12345),并以此为基础构建模型。
我需要用不同的 set.seed 重复 20 次。每次在不同的 set.seed.
上构建模型EDIT2
简单地说,如果我有 30 次折叠,我将在这 30 次折叠上建立线性回归,因此我将有 30 个模型结果。我需要有相同的过程,但有不同的 30 次折叠(20 次,20 次中的每一次我都有不同的 30 次折叠)所以,我将在 30 次不同的折叠中每次构建模型。
folds <- replicate(20,createFolds(wdbcc$PE, k = k, list = FALSE, returnTrain = TRUE))
如果您不介意将折叠放在向量(矩阵的列)中而不是列表中。
编辑: 我上面的代码已经确保了种子随机数,因为每次你 运行 上面的代码你都会得到相同的折叠(全部 20 个)用给定的种子。但是,如果您绝对希望每个重采样都有一个特定的种子(这是可疑的),您可以执行以下操作
wdbcc=as.data.frame(scale(wdbc))
lmv = vector("list",20)
mySeed=c(1,2,3,4,5,...,20) #vector with your pre-defined seeds
for (i in 1:length(lmv)) {
set.seed(mySeed[i])
lmv2 = vector("list",30)
folds <- createFolds(wdbcc$PE, k = 30, list = FALSE, returnTrain = TRUE)
for (j in 1:length(lmv2)) {
lmv2[[j]] = lm(PE~ ., data = wdbcc[folds!=j,])
}
lmv[[i]] = lmv2
}
createFolds 可能无法按预期工作:
folds <- replicate(20,createFolds(wdbcc$PE, k = k, list = FALSE, returnTrain = TRUE))
只有当 list = TRUE 时,它才会 return 火车,根据文档:
returnTrain a logical. When true, the values returned are the sample positions corresponding to the data used during training. This argument only works in conjunction with list = TRUE