【发布时间】: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<- 中包含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