R Caret 的时间片 - window 和 horizon 不清楚

R Caret's timeslices - window and horizon unclear

使用插入符号中的时间片及其参数, 如何将数据拆分为 xyz 行,每行的长度为 12?

理想情况下,还要考虑 60-20-20 train-test-validate 比率。

要不要这样设置:

initialWindow=12, horizon=12, fixedWindow=TRUE?

我已经阅读了文档,但我仍然不清楚。

您可以尝试使用 1:100 等示例向量会发生什么。 如果您设置 window = 12fixedWindow = T 训练集将始终有 12 行。 horizon 指定将包含在测试集中的后续观察的大小。如果它设置为 12 并且您不希望任何行被多次预测 skip 必须设置为 (horizo​​n - 1).

60-20-20 的分区可以通过将 initialWindow 设置为前 60% 的大小和第一个 运行 你的模型在 [=17] 的前半部分来实现=] 并使用 slices 的后半部分作为最后的 20%。

我不知道您是否已经尝试在插入符号的 train 函数中使用时间切片。在任何情况下,您都可以使用 createTimeSlices() 函数尝试不同的设置:

library(caret)
dat <- 1:100

slices <- createTimeSlices(dat, initialWindow = 12, horizon = 1, 
                           skip = 0, fixedWindow = T)
slices # 88 test and train sets
# [...]

slices <- createTimeSlices(y = dat, initialWindow = 12, horizon = 12,
                           skip = 11, fixedWindow = T)
slices 
# 7 test and train sets, observations 97 - 100 not in any test set

$train
$train$Training01
 [1]  1  2  3  4  5  6  7  8  9 10 11 12

$train$Training13
 [1] 13 14 15 16 17 18 19 20 21 22 23 24

$train$Training25
 [1] 25 26 27 28 29 30 31 32 33 34 35 36

$train$Training37
 [1] 37 38 39 40 41 42 43 44 45 46 47 48

$train$Training49
 [1] 49 50 51 52 53 54 55 56 57 58 59 60

$train$Training61
 [1] 61 62 63 64 65 66 67 68 69 70 71 72

$train$Training73
 [1] 73 74 75 76 77 78 79 80 81 82 83 84


$test
$test$Testing01
 [1] 13 14 15 16 17 18 19 20 21 22 23 24

$test$Testing13
 [1] 25 26 27 28 29 30 31 32 33 34 35 36

$test$Testing25
 [1] 37 38 39 40 41 42 43 44 45 46 47 48

$test$Testing37
 [1] 49 50 51 52 53 54 55 56 57 58 59 60

$test$Testing49
 [1] 61 62 63 64 65 66 67 68 69 70 71 72

$test$Testing61
 [1] 73 74 75 76 77 78 79 80 81 82 83 84

$test$Testing73
 [1] 85 86 87 88 89 90 91 92 93 94 95 96

初始 window + horizo​​n - 1 将确保您的训练折叠和测试折叠不重叠。

timeSlices <- createTimeSlices(1:nrow(DF), initialWindow = 36, horizon = 6, skip = 41, fixedWindow = TRUE)
trainSlices <- timeSlices[[1]]
testSlices <- timeSlices[[2]]
testSlices <- do.call(rbind.data.frame, testSlices)
trainSlices <- do.call(rbind.data.frame, trainSlices)