【问题标题】:Generating testing and training datasets with replacement in R在 R 中生成带有替换的测试和训练数据集
【发布时间】:2019-07-29 00:21:15
【问题描述】:

我已经镜像了一些代码来执行分析,并且一切正常(我相信)。但是,我试图理解与将数据拆分为 40% 的测试集和 60% 的训练集相关的几行代码。

据我目前的理解,代码将每一行随机分配到第 1 组或第 2 组。随后,分配给 1 的所有行都被拉入训练集,而 2 的行被拉入测试。

后来,我意识到我不希望在数据分析中使用替换抽样。尽管在这种情况下,我不确定实际替换的是什么。目前,我认为不是实际数据本身被替换,而是“1”和“2”占位符。我希望准确了解这些代码行的工作原理。根据我的结果,它似乎正在完成我想要的工作。我需要确认数据本身是否被替换。

为了测试有问题的行,我创建了一个包含 10 个唯一值(1 到 10)的数据框。

如果数据值本身被替换采样,我希望在“training1”或“testing2”中看到一些重复。我用 10 个不同的 set.seed 编号运行了这些代码行 10 次,并且数据值从未重复。对我来说,这表明数据本身没有被替换。

如果我设置 replace= FALSE 我得到这个错误:

Error in sample.int(x, size, replace, prob) : 
  cannot take a sample larger than the population when 'replace = FALSE'

set.seed(8)
test  <-sample(2, nrow(df), replace = TRUE, prob = c(.6,.4))

training1 <- df[test==1,]
testing2 <- df[test==2,]

我想将我的数据分成 60-40 个训练和测试。虽然我不确定这是否真的发生了。我认为 prob 函数没有做我认为应该做的事情。我注意到 prob 函数实际上并没有将数据完全分成 60% 和 40%。在 n=10 示例的情况下,它可能导致 7 训练 2 测试,甚至 6 训练 4 测试。对于我实际较大的数据集 ~n=2000+,它的平均值非常接近 60/40(即 60.3/39.7)。

【问题讨论】:

    标签: r sampling


    【解决方案1】:

    除非观察的数量很大,否则您的抽样方式必然会导致不希望的/随机拆分大小,正式称为law of large numbers。要进行更确定性的拆分,请确定训练数据的大小/观察次数,并使用它从 nrow(df) 中采样:

    set.seed(8)
    
    # for a 60/40 train/test split
    train_indx = sample(x = 1:nrow(df),
                        size = 0.6*nrow(df), 
                        replace = FALSE)
    
    train_df <- df[train_indx,]
    test_df <- df[-train_indx,]
    

    【讨论】:

    • 感谢您的回复,这是分割数据的更好方法
    【解决方案2】:

    我建议根据 Mankind_008 的回答拆分代码。由于我根据原始代码进行了相当多的分析,因此我花了几个小时研究它究竟做了什么。

    原代码:

    test  <-sample(2, nrow(df), replace = TRUE, prob = c(.6,.4))
    

    答案来自(https://www.datacamp.com/community/tutorials/machine-learning-in-r):

    "请注意,replace 参数设置为 TRUE:这意味着您将 1 或 2 分配给某一行,然后将 2 的向量重置为其原始状态。这意味着,对于您的下一行数据集,您可以再次分配 1 或 2。选择 1 或 2 的概率不应与其余项目之间的权重成比例,因此您指定概率权重。另请注意,即使你在 DataCamp Light 块中看不到它,种子仍然设置为 1234。”

    我主要担心数据值本身被替换。相反,它似乎允许根据概率再次分配 1 和 2 占位符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-21
      • 2018-10-13
      • 2019-01-14
      • 2018-04-22
      • 2017-02-20
      • 2016-11-03
      • 1970-01-01
      相关资源
      最近更新 更多