将数据划分为训练、测试和验证 - 在 R 中拆分

Posted

技术标签:

【中文标题】将数据划分为训练、测试和验证 - 在 R 中拆分【英文标题】:Create data partition into training, testing and validation - split in 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]]

【问题讨论】:

进行两次拆分:(1) 将原始数据拆分为训练和临时数据,(2) 将临时数据拆分为测试和验证。 重复:***.com/questions/36068963/… 2017 年 8 月:R topepo.github.io/rsample 中现在有 rsample 【参考方案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% 的验证。

【讨论】:

以上是关于将数据划分为训练、测试和验证 - 在 R 中拆分的主要内容,如果未能解决你的问题,请参考以下文章

根据唯一ID将pandas数据框划分为测试和训练

如何拆分数据进行训练和测试?交叉验证可能吗? M估计还是OLS?

如何将训练数据集拆分为训练,验证和测试数据集?

将主数据目录拆分为训练/验证/测试集

将图像数组和标签数据帧拆分为训练、测试和验证集

随机拆分训练和测试数据