我尝试将数据集分成3个部分:培训:60%,测试:20%,验证:20%。
part1 <- createDataPartition(fullDataSet$classe, p=0.8, list=FALSE)
validation <- fullDataSet[-part1,]
workingSet <- fullDataSet[part1,]
当我做同样的事情再次分区时:
inTrain <- createDataPartition(workingSet$classe, p=.75, list=FALSE)
我收到错误:
Error in sort.list(y) : 'x' must be atomic for 'sort.list'
Have you called 'sort' on a list?
有没有办法要么a)创建3个不同大小的分区,或者b)像我试图做的那样做一个嵌套分区?我认为c)使用sample()代替,但是对于教师只使用createDataPartition的类,我们必须显示我们的代码。有没有人在这里有任何建议?
答案 0 :(得分:4)
实际上我想知道同样的事情,我想出了一个非常优雅的解决方案,但这似乎有效。
因此,在我的情况下,我想创建一个包含60%数据和测试和验证数据集的训练数据集,每个数据集占20%。 我是这样做的:
set.seed(1234)
inTraining <- createDataPartition(mydata$FLAG, p=0.6, list=FALSE)
training.set <- mydata[inTraining,]
Totalvalidation.set <- mydata[-inTraining,]
# This will create another partition of the 40% of the data, so 20%-testing and 20%-validation
inValidation <- createDataPartition(Totalvalidation.set$FLAG, p=0.5, list=FALSE)
testing.set <- Totalvalidation.set[inValidation,]
validation.set <- Totalvalidation.set[-inValidation,]
看起来它给了我正确的数据集,并将在今天进行测试。 希望它对你有用,如果有人有更优雅的答案请分享! :)
答案 1 :(得分:0)
#METHOD 1 : EQUAL SPLITS
# allind <- sample(1:nrow(m.d),nrow(m.d))
# #split in three parts
# trainind <- allind[1:round(length(allind)/3)]
# valind <- allind[(round(length(allind)/3)+1):round(length(allind)*(2/3))]
# testind <- allind[round(length(allind)*(2/3)+1):length(allind)]
set.seed(1234)
#METHOD 2 : 60-30-20 SPLIT
allind <- sample(1:nrow(m.d),nrow(m.d))
trainind <- allind[1:round(length(allind)*0.6)]
valind <- allind[(round(length(allind)*0.6)+1):((round(length(allind)*0.6)+1)+
(round(length(allind)*0.3)))]
testind <- allind[((round(length(allind)*0.6)+1)+
(round(length(allind)*0.3))+1):length(allind)]
m.dTRAIN <- m.d[trainind,]
m.dVAL <- m.d[valind,]
m.dTEST <- m.d[testind,]