【发布时间】:2019-11-15 16:57:02
【问题描述】:
我有一些包含大约 30000 条记录的数据。我想将数据分成 288 条记录组。然后将数据排序到 test_data 和 train_data 单独的数据帧中,其中前 4 条记录存储到 train_data 中,而第 5 条记录存储到 test_data 中,顺序和随机。 5 天中的任何一天以某种方式随机保存到 test_data 中,其余 4 天保存到 train_data 中。
如何做到这一点?
样本数据:
# timestamp var1 var2
--------------------------------------
1 01-01-2019 18:00:00 1.2 21
2 01-01-2019 18:05:00 2.3 32
3 01-01-2019 18:10:00 3.4 43
4 01-01-2019 18:15:00 4.5 54
5 01-01-2019 18:20:00 5.6 65
.
.
.
3000 .. - .. .. .. ..
样本输出:
#in case of sequencial OR contiguous division
train_data = (#1,#2,#3,#4 .... #1152,#1441,......,#2592,...)
test_data = (€253,#254,.....,#1440,.....,#2593,....)
#in case of random division, any 288 contiguous records from bunch of 5 in to #test_data and 4x288 into train_data.
目前我有这种数据拆分方法。
set.seed(100)
train <- sample(nrow(dataset1), 0.7 * nrow(dataset1), replace = FALSE)
TrainSet <- dataset1[train,]
#scale (TrainSet, center = TRUE, scale = TRUE)
ValidSet <- dataset1[-train,]
#scale (ValidSet, center = TRUE, scale = TRUE)
summary(TrainSet)
summary(ValidSet)
【问题讨论】:
-
我不确定您所说的“随机和平等”是什么意思。您想首先将数据框拆分为一组较小的数据框,每个数据框有 288 条记录,对吗?然后你想把每一个分成两组,训练和测试?您介意用所需输出的实际示例以及您尝试过的代码来澄清问题吗?
-
@Aziz:基本上,当我输入一些样本数据时,我的数据是每小时每 5 分钟记录一次的观察结果。所以每天有 288 次观察。我想分发数据 4 天用于训练,1 天用于测试数据。所以通过将数据分成288条记录,我认为可以实现。不将数据拆分为 288 条记录的数据帧,而是以 288 条记录为单位或组,代表 1 天。我添加的示例输出和用于采样数据的代码。
-
30,000 个观察值代表 104 或 105 天,您想要一个大约 84 天的训练集和一个 20-21 天的测试集?但是样本应该是系统未对齐的,也就是说每组 5 天,一个去测试,另外四个去训练?
-
如果我理解正确的话,您希望将同一天的数据保存在一起,但希望将您的“天”分成两组,80% 用于训练,20% 用于测试?
-
@Aziz:完全一样