插入符号:组合createResample和groupKFold

插入符号:组合createResample和groupKFold,r,cross-validation,r-caret,R,Cross Validation,R Caret,我想使用插入符号进行自定义采样。我的规格如下: 我每天观察1次,我的分组因子是月份(12个值);因此,在第一步中,我在11个月的训练(11*30分)和1个测试(30分)中创建了12个重采样。这样我总共得到12个重采样 但这对我来说还不够,我想通过添加每个分区的训练点的自举,使它更复杂一些。因此,在重采样01中,我将使用这330个点的几个自举重采样,而不是11*30个点。 所以最后,我想要很多重采样,但其中一个月从未在训练集中 如何在调用列车时指定此项? 我尝试的是: library(caret)

我想使用插入符号进行自定义采样。我的规格如下: 我每天观察1次,我的分组因子是月份(12个值);因此,在第一步中,我在11个月的训练(11*30分)和1个测试(30分)中创建了12个重采样。这样我总共得到12个重采样

但这对我来说还不够,我想通过添加每个分区的训练点的自举,使它更复杂一些。因此,在重采样01中,我将使用这330个点的几个自举重采样,而不是11*30个点。 所以最后,我想要很多重采样,但其中一个月从未在训练集中

如何在调用
列车
时指定此项? 我尝试的是:

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)
将嵌套列表转换为一维列表-这解决了嵌套列表问题

folds2 <- unlist(folds2 , recursive = FALSE, use.names = TRUE)

我最初建议
purrr::map\u df(折叠,创建重采样,时间=10,.id=“id”)
,但这在
caret::trainControl()
@Phil不可行。谢谢你的帮助。无论如何,我很高兴发现这个
map
功能谢谢你的回答@missue。你完全正确,我真的只想在测试集中有第12个月。顺便说一下,
setdiff
的使用很好。如果我做对了,插入符号中没有内置函数来实现我想要的功能。我很乐意提供帮助。我不确定是否有内置插入符号功能,据我所知,该功能不是内置的,但您可能需要检查
createTimeSlices
trainControl(method=“timeslice”…
在我看来,它们似乎能够形成集合,因此只能预测未来数据,我从未进行过认真的ts分析,因此我在这方面的知识不足。此外,从我所看到的情况来看,您的示例并不严格属于ts分析,因为您也想根据以后的观察预测以前的时间。您是在测试我不在时间序列框架中,这里也不使用特定于时间序列的模型。
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)
)
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)
)