我有一个大约连续50天的数据集。我想把它分为训练和测试数据集,这样一周中每5天都在训练集中,一周中有2天在测试集中。
测试集的2天应随机选择。不总是这样,例如选择前两天。
我怎么能那样做?
在R中有这个函数吗?目前,这就是我将数据划分为训练集和测试集的方式,但这样做可能会使测试和训练数据时间非常接近,因此总是产生非常高的MSR值。
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)
示例数据:
data
# timestamp var1 var2 var3 var5
#1 2018-07-20 13:40:00 12 0.00 30.12 10
#2 2018-07-20 13:45:00 12 0.10 10.15 10
#3 2018-07-20 13:50:00 2 11.00 19.22 17
#4 2018-07-20 13:55:00 22 3.05 23.31 3
dput(data)
structure(list(timestamp = c("2018-07-20 13:50:00", "2018-07-20 13:52:00",
"2018-07-20 13:54:00", "2018-07-20 13:56:00"), var1 = c(12, 12,
2, 22), var2 = c(0, 0.1, 11, 3.05), var3 = c(30.12, 10.15, 19.22,
23.31), var5 = c(10L, 10L, 17L, 3L)), class = "data.frame", row.names = c(NA,
-4L))
这是一个如何对等数据进行分区的示例
set.seed(42)
days_of_the_week <- letters[1:7]
df <- data.frame(day = days_of_the_week, value = rnorm(105))
train_days <- sample(unique(df$day), 2)
test_days <- setdiff(df$day, train_days)
test_data <- df[df$day %in% test_days, ]
train_data <- df[df$day %in% train_days, ]