将数据分割为训练集、测试集和验证集 - 在R中进行划分

4

我希望将我的训练数据分为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,]

是否有一种类似于以下 H2o 方法的使用 createDataPartition() 进行训练、测试和验证集分割的方法?

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
进行两次分割:(1)将原始数据分成训练集和临时集,以及(2)将临时集分为测试集和验证集。 - Gregor Thomas
如何在R中将数据框分成训练、验证和测试集? - stackoverflowuser2010
2017年8月:现在R语言中有了rsample包 https://topepo.github.io/rsample/ - alexpghayes
2个回答

9
使用基础 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,]

nrow(data.hex) [1] 25192 nrow(train.hex) [1] 8398 valid.hex <- data.hex[splitSample==2,] nrow(valid.hex) [1] 8397 test.hex<- data.hex[splitSample==3,] nrow(test.hex) [1] 8397
但它们之间的差异只有1,这正确吗?
- Mahsolid
1
哎呀,忘记了尺寸参数。 - lmo
2
请注意,这是(准)随机的,因此大小将大约相等为0.7、0.15、0.15,但不完全相同。为了复制目的,您需要在第一行上方设置种子:set.seed(某个整数) - lmo

0

看一下在R中CARET的训练、验证、测试数据集分割模型。其思路是使用createDataPartition()函数两次。第一次p=0.7创建70%的训练数据和30%的剩余数据。第二次在剩余数据上以p=0.5的比例创建15%的测试数据和15%的验证数据。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接