我已经镜像了一些代码来执行分析,并且一切正常(我相信)。但是,我试图理解与将数据拆分为 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)。