如何查看由for循环生成的特定生成的训练和测试集?

时间:2018-11-07 08:58:22

标签: r random

我的程序将我的数据集分为训练集和测试集,基于训练集和测试集构建决策树,并计算混淆矩阵的准确性,敏感性和特异性。

我添加了一个 for循环,以将程序重新运行100次。这意味着我得到了100套训练和测试集。 for循环的输出为 result_df ,其中包括准确性,特异性和敏感性列。

这是for循环:

result_df<-matrix(ncol=3,nrow=100)
colnames(result_df)<-c("Acc","Sens","Spec")

for (g in 1:100 )
{

  # Divide into Train and test set
  smp_size <- floor(0.8 * nrow(mydata1))
  train_ind <- sample(seq_len(nrow(mydata1)), size = smp_size)
  train <- mydata1[train_ind, ]
  test <- mydata1[-train_ind, ]

  REST OF MY CODE

}

我的result_df(前20行)如下:

> result_df[1:20,]
   Acc Sens Spec id
1   26   22   29  1
2   10   49   11  2
3   37   43   36  3
4    4   79    4  4
5   21   21   20  5
6   31   17   34  6
7   57    4   63  7
8   33    3   39  8
9   56   42   59  9
10  65   88   63 10
11   6   31    7 11
12  57   44   62 12
13  25   10   27 13
14  32   24   32 14
15  19    8   19 15
16  27   27   29 16
17  38   89   33 17
18  54   32   56 18
19  35   62   33 19
20  37    6   40 20

我使用ggplot()将散布图和灵敏度绘制为散点图:

enter image description here

我想做什么

我想看例如数据点17的训练和测试集。

我认为我可以使用set.seed函数来做到这一点,但是我对此函数并不熟悉。

1 个答案:

答案 0 :(得分:0)

首先,很明显,如果在代码中存储了估算模型(例如,存储在列表中),则可以从这些模型中恢复数据。但是,事实并非如此。

使用当前代码,您所能做的就是查看最后的训练和测试集(编号100)。那是因为您一直在重新定义testtraintrain_ind变量。实现所需目标的最便宜的方式(就内存而言)是在每次迭代中以某种方式存储train_ind。例如,您可以使用

train_inds <- list()[rep(1, 100)]
for (g in 1:100 )
{
  smp_size <- floor(0.8 * nrow(mydata1))
  train_inds[[g]] <- sample(seq_len(nrow(mydata1)), size = smp_size)
  train <- mydata1[train_inds[[g]], ]
  test <- mydata1[-train_ind[[g]], ]
  # The rest
}

,通过这种方式,您将始终知道哪个观测值位于哪个集合中。如果您只对某一特定迭代感兴趣,则可以仅保存该迭代。

最后,set.seed并没有帮助。如果您所做的只是运行rnorm(1)一百次,那么可以,通过使用set.seed,您可以稍后快速恢复第n个生成的值。但是,就您而言,您不仅将sample用于train_ind,还使用了# test_set_order.py def unpack(input): print('input is {}'.format(input)) result = [] for i in input: result.extend(i) return result print(unpack({'A', 'B'})) 。模型估计函数也很可能生成随机值。