【问题标题】:Data Partition in RR中的数据分区
【发布时间】:2015-12-20 18:22:44
【问题描述】:

我正在寻找一种在不使用sample() 函数的情况下对数据集进行分区的稳健方法,并希望得到一些反馈。

事实上,理想情况下,我希望摆脱 random 使用 sample() 所固有的属性

samp<-data.frame(qldat)   # convert zoo time-series object to data.frame
ind <- sample(2,nrow(samp),replace = TRUE, prob=c(0.8,0.2))  # splitting
#data series between training and test sets
tsamp<- samp[ind==1,]  # training dataset
vsamp<- samp[ind==2,]  # test set

经过一些研究,我发现subset() 可能会有所帮助,但它可能涉及到一些hard-coding数据集。 硬编码我的意思是对于使用 nrow(samp)80:20 拆分(%),例如可以将数据从 row=1 子集化到 row= 0.8 * nrow(samp) ,承认这可能不是一个非常有效的解决方案。

我也尝试过createDataPartition(),但它不符合我的预期,因为samp 没有我可以依赖的任何categorical data 进行拆分(例如createDataPartition(y=samp$categoricaldata,p=0.8, list=FALSE

PS:我喜欢在ind&lt;- 中包含prob=c(0.8,0.2),因此切片是自动排序的。因此,任何类似的想法不随机拆分 tsamp && vsamp 将不胜感激。

最好的,

【问题讨论】:

  • 如果不是随机的,你想如何确定数据的哪一部分是训练和测试的?您是否总是希望按行在数据中出现的顺序来执行此操作?如果无法进行“清晰”拆分(例如 0.2 和 0.8 以及 101 次观察的概率),会发生什么情况。
  • @Heroka:使用nrow()。如果某个特定列是从假设[1:10] 索引的,那么考虑从[round(1*80%):8]tsamp 的第一个拆分。希望对您有所帮助。

标签: r dataframe partitioning zoo


【解决方案1】:

这是你要找的吗?

n <- nrow(samp)
train_i <- 1:round(0.8*n)
test_i <- round(0.8*n+1):n
train <- samp[train_i,]
test <- samp[test_i,]

【讨论】:

  • 谢谢,你肯定明白我的意思。您的建议确实有效,我会接受它作为答案,尽管 - 如线程中所示 - 我不想以某种方式使用 (0.8* n) 对数据集进行硬编码。也许没有其他选择......
  • 您希望分割比例是随机的还是您要寻找什么?
  • 到目前为止,我对静态权重很满意,但只是认为可能有一种不同的方式可以在单个语句中复制它,例如 ind&lt;-
  • 你能描述一下上述方法不起作用的设置吗?
  • “条条大路通罗马”,你的方法行得通,不用担心。我在帖子中通过&lt;-ind 编辑的也可以工作,我对包含权重向量有一点偏好。不幸的是,正如预期的那样,由于sample(),我的训练和测试集是随机填充的,我一直在寻找没有sample() 的类似语法(如果存在)。希望清楚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-28
  • 2021-08-15
  • 2017-01-27
  • 2014-05-24
  • 1970-01-01
  • 2015-03-09
  • 2014-07-07
相关资源
最近更新 更多