R需要十个独特的样本并进入训练/测试集?

时间:2016-11-10 16:16:08

标签: r loops resampling

所以我的任务是将506个观察数据框分成10个不同的训练和测试集样本(替换)。 我这样做,所以我可以通过一个模型,看到10个样本的平均MSE。 到目前为止,我已经有了以下愚蠢的复杂循环:

temp_train<- setNames(lapply(1:10, function(x) {x <-homeprices[sample(1:nrow(homeprices), 
.8*n, replace = FALSE), ]; x }), paste0("tr_sample.", 1:10))
for (i in 1:length(temp_train)) {
  assign(paste0("df_train_", i), as.data.frame(temp_train[i]))
  name<-assign(paste('df_train_', i, sep=''), x[i])
  temp_test<- setNames(homeprices[-name], paste0("te_sample.", 1:10))
  alpha<-assign(paste0("df_test_", i), as.data.frame(temp_test[i]))
}

这个for循环产生说df_test_2,它是一个变量506观察的数据帧。它应该是包含13个变量的102个obvs的数据帧,即不在df_train_2中的102个观测值。 因此,我的问题是,实现这一目标的更好方法是什么?如果可能的话,我宁愿不安装任何软件包,因为我想掌握基础知识。

1 个答案:

答案 0 :(得分:1)

在基础R中处理此类任务的常见(且有效)策略不是创建每个单独的数据框,而是创建一组定义分区的索引。

例如,

x <- replicate(n = 10,expr = {sample(506,404)})

创建一个矩阵,其中十列中的每一列都填充了随机选择的404行(506的80%左右)的行索引。然后,您将遍历模型拟合并使用x列来选择传递给模型的数据的训练子集。相同指数的负指数将产生相应的20%用于测试。

这样就不会有大量的数据框副本。