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 = 12
和 fixedWindow = T
训练集将始终有 12 行。 horizon
指定将包含在测试集中的后续观察的大小。如果它设置为 12 并且您不希望任何行被多次预测 skip
必须设置为 (horizon - 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 + horizon - 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)
使用插入符号中的时间片及其参数, 如何将数据拆分为 xyz 行,每行的长度为 12?
理想情况下,还要考虑 60-20-20 train-test-validate 比率。
要不要这样设置:
initialWindow=12, horizon=12, fixedWindow=TRUE?
我已经阅读了文档,但我仍然不清楚。
您可以尝试使用 1:100
等示例向量会发生什么。
如果您设置 window = 12
和 fixedWindow = T
训练集将始终有 12 行。 horizon
指定将包含在测试集中的后续观察的大小。如果它设置为 12 并且您不希望任何行被多次预测 skip
必须设置为 (horizon - 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 + horizon - 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)