【问题标题】:in caret: creating multiple different size partitions for testing/training/validation插入符号:为测试/训练/验证创建多个不同大小的分区
【发布时间】:2014-11-02 00:38:39
【问题描述】:

我正在尝试获取一个数据集并将其分成 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 的课程,我们必须展示我们的代码。有人在这里有什么建议吗?

【问题讨论】:

    标签: r r-caret data-partitioning


    【解决方案1】:

    其实我也有同样的疑惑,我想出了一个不太优雅的解决方案,但这似乎可行。

    因此,就我而言,我想创建一个包含 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,]
    

    看起来它为我提供了正确的数据集,并将在今天对其进行测试。 希望它对您有用,如果其他人有更优雅的答案,请分享! :)

    【讨论】:

    • 这正是我所做的。不幸的是,我不确定是否有更多的caret-native 解决方案,或者可以用createDataPartition 编写的单行代码。
    【解决方案2】:
      #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,]
    

    【讨论】:

    • 我很确定他希望通过 fullDataSet$classe 对拆分进行分层
    猜你喜欢
    • 2017-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-16
    • 2020-02-12
    • 2020-02-10
    • 2019-06-13
    相关资源
    最近更新 更多