插入符号:组合 createResample 和 groupKFold
caret: combine createResample and groupKFold
我想用 caret
进行自定义抽样。我的规格如下:
我每天有 1 个观察值,我的分组因子是月份(12 个值);因此,在第一步中,我创建了 12 个重采样,训练时间为 11 个月(11*30 点),测试时间为 1 个月(30 点)。这样我总共得到了 12 个重采样。
但这对我来说还不够,我想通过为每个分区的训练点添加一些自举来让它变得更复杂一点。因此,我不会在 Resample01 中使用 11*30 个点,而是对这 330 个点进行多次自举重采样。
所以最后,我想要大量的重采样,但训练集中永远没有几个月。
如何在调用 train
时指定它?
我尝试了什么:
library(caret)
x = rep(1:12, each=30)
folds = groupKFold(x, k=12)
folds2 = lapply(folds, createResample, times=10)
但这是错误的,因为 1/ 我得到了一个嵌套列表,2/ 初始索引在第二步丢失了。
感谢您的帮助(如果您认为它是 XY pb,请随时告诉我)
我相信这会解决您的问题
library(caret)
x <- rep(1:12, each = 30)
folds <- groupKFold(x, k = 12)
为 folds
中的每个组在嵌套列表中提供 10 bootstrap 个副本 - 这解决了丢失索引的问题。
folds2 <- lapply(folds, function(x) lapply(1:10, function(i) sample(x, size = length(x), replace = TRUE)))
将嵌套列表转换为一维列表 - 这解决了嵌套列表问题。
folds2 <- unlist(folds2 , recursive = FALSE, use.names = TRUE)
有效吗?
df <- data.frame(y = rnorm(360), x = rnorm(360))
lm_formula <- train(
y ~ ., df,
method = "lm",
trControl = trainControl(method = "boot" , index = folds2)
)
看起来确实如此。
唯一的问题可能是每个重新采样的预期 indexOut
,在示例中,折叠中不存在的所有索引都用作测试。如果我理解你想测试保留月份而不是所有保留样本。要解决这个问题:
folds_out <- lapply(folds, function(x) setdiff(1:360, x))
folds_out <- rep(folds_out, each = 10)
names(folds_out) <- names(folds2)
lm_formula <- train(
y ~ ., df,
method = "lm",
trControl = trainControl(method = "boot" , index = folds2, indexOut = folds_out)
)
我想用 caret
进行自定义抽样。我的规格如下:
我每天有 1 个观察值,我的分组因子是月份(12 个值);因此,在第一步中,我创建了 12 个重采样,训练时间为 11 个月(11*30 点),测试时间为 1 个月(30 点)。这样我总共得到了 12 个重采样。
但这对我来说还不够,我想通过为每个分区的训练点添加一些自举来让它变得更复杂一点。因此,我不会在 Resample01 中使用 11*30 个点,而是对这 330 个点进行多次自举重采样。 所以最后,我想要大量的重采样,但训练集中永远没有几个月。
如何在调用 train
时指定它?
我尝试了什么:
library(caret)
x = rep(1:12, each=30)
folds = groupKFold(x, k=12)
folds2 = lapply(folds, createResample, times=10)
但这是错误的,因为 1/ 我得到了一个嵌套列表,2/ 初始索引在第二步丢失了。
感谢您的帮助(如果您认为它是 XY pb,请随时告诉我)
我相信这会解决您的问题
library(caret)
x <- rep(1:12, each = 30)
folds <- groupKFold(x, k = 12)
为 folds
中的每个组在嵌套列表中提供 10 bootstrap 个副本 - 这解决了丢失索引的问题。
folds2 <- lapply(folds, function(x) lapply(1:10, function(i) sample(x, size = length(x), replace = TRUE)))
将嵌套列表转换为一维列表 - 这解决了嵌套列表问题。
folds2 <- unlist(folds2 , recursive = FALSE, use.names = TRUE)
有效吗?
df <- data.frame(y = rnorm(360), x = rnorm(360))
lm_formula <- train(
y ~ ., df,
method = "lm",
trControl = trainControl(method = "boot" , index = folds2)
)
看起来确实如此。
唯一的问题可能是每个重新采样的预期 indexOut
,在示例中,折叠中不存在的所有索引都用作测试。如果我理解你想测试保留月份而不是所有保留样本。要解决这个问题:
folds_out <- lapply(folds, function(x) setdiff(1:360, x))
folds_out <- rep(folds_out, each = 10)
names(folds_out) <- names(folds2)
lm_formula <- train(
y ~ ., df,
method = "lm",
trControl = trainControl(method = "boot" , index = folds2, indexOut = folds_out)
)