我正在尝试创建10倍的数据。我想要的是一个长度为10 (折叠数)的数据结构,数据结构的每个元素都包含一个对象/数据结构,它有两个属性/元素;训练集和该折叠处的测试集。这是我的R码。例如,我想访问View(data_pairs[[8]]$training_set)
在折叠8上设置的培训集。但这不起作用。如能提供任何帮助,将不胜感激:)
k <- 10 # number of folds
i <- 1:k
folds <- sample(i, nrow(data), replace = TRUE)
data_pairs <- list()
for (j in i) {
test_ind <- which(folds==j,arr.ind=TRUE)
test <- data[test_ind,]
train <- data[-test_ind,]
data_pair <- list(training_set = list(train), test_set = list(test))
data_pairs <- append(x = data_pairs, values = data_pair)
}
发布于 2020-08-21 13:49:33
您非常接近,只需将values
封装在list
调用中即可。
k <- 10 # number of folds
i <- 1:k
folds <- sample(i, nrow(mtcars), replace = TRUE)
data_pairs <- list()
for (j in i) {
test_ind <- which(folds==j,arr.ind=TRUE)
test <- mtcars[test_ind,]
train <- mtcars[-test_ind,]
data_pair <- list(training_set = train, test_set = test)
data_pairs <- append(x = data_pairs, values = list(data_pair))
#data_pairs <- c(data_pairs, list(data_pair))
}
如果你的数据很大,我建议你以更有效的方式阅读这两篇文章。
我还想指出的是,你并不是在创建你的数据的“折叠”。在您的情况下,您正在尝试一个10倍的交叉验证,这意味着您的数据应该被分割成10个“相等”大小的块。然后创建10个训练/测试数据集,使用每个折叠作为测试数据,其余用于培训。
发布于 2020-08-21 13:49:25
似乎modelr
包可以在这里帮助您。我特别要指出的是:
https://modelr.tidyverse.org/reference/resample_partition.html
库(Modelr) ex <- resample_partition(mtcar,c(test = 0.3,mod =0.7)mod <- lm(mpg ~ wt,data =ex$resample_partition) rmse(mod,ex$test) #> 1 3.229756 rmse(mod,ex$ train ) #> 1 2.88216
或者,生成这些分区的数据集可以使用:crossv_mc(data, n, test = 0.2, id = ".id")
完成。
https://stackoverflow.com/questions/63523623
复制相似问题