【问题标题】:Create data partition into training, testing and validation - split in R将数据划分为训练、测试和验证 - 在 R 中拆分
【发布时间】:2016-07-28 16:57:10
【问题描述】:

我想将我的训练数据分成 70% 的训练、15% 的测试和 15% 的验证。我正在使用 caret 包的 createDataPartition() 函数。我将其拆分如下

train <- read.csv("Train.csv")
test <- read.csv("Test.csv")

split=0.70
trainIndex <- createDataPartition(train$age, p=split, list=FALSE)
data_train <- train[ trainIndex,]
data_test <- train[-trainIndex,]

有什么方法可以使用createDataPartition() 拆分为训练、测试和验证,就像下面的H2o 方法一样?

data.hex <- h2o.importFile("Train.csv")
splits <- h2o.splitFrame(data.hex, c(0.7,0.15), destination_frames = c("train","valid","test"))
train.hex <- splits[[1]]
valid.hex <- splits[[2]]
test.hex  <- splits[[3]]

【问题讨论】:

标签: r machine-learning classification r-caret


【解决方案1】:

在基础 R 中使用sample() 函数的方法是

splitSample <- sample(1:3, size=nrow(data.hex), prob=c(0.7,0.15,0.15), replace = TRUE)
train.hex <- data.hex[splitSample==1,]
valid.hex <- data.hex[splitSample==2,]
test.hex <- data.hex[splitSample==3,]

【讨论】:

  • &gt; nrow(data.hex) [1] 25192 &gt; nrow(train.hex) [1] 8398 &gt; valid.hex &lt;- data.hex[splitSample==2,] &gt; nrow(valid.hex) [1] 8397 &gt; test.hex&lt;- data.hex[splitSample==3,] &gt; nrow(test.hex) [1] 8397 但它们之间的区别只有 1. 这是正确的吗?
  • 糟糕。忘记了大小参数。
  • 请注意,这是(准)随机的,因此大小将大约等于 0.7、0.15、0.15,但不完全一样。出于复制目的,您可能希望将种子设置在第一行上方:set.seed(some integer)
【解决方案2】:

看看train,validation, test split model in CARET in R。这个想法是使用 createDataPartition() 两次。第一次 p=0.7 创建 70% 的训练数据和 30% 的剩余数据。第二次对剩余数据进行 p=0.5,以创建 15% 的测试和 15% 的验证。

【讨论】:

    猜你喜欢
    • 2019-05-01
    • 1970-01-01
    • 2018-11-19
    • 1970-01-01
    • 2021-01-19
    • 2016-07-04
    • 1970-01-01
    • 2019-06-13
    相关资源
    最近更新 更多