将数据划分为训练、测试和验证 - 在 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,]
【讨论】:
> 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. 这是正确的吗?
糟糕。忘记了大小参数。
请注意,这是(准)随机的,因此大小将大约等于 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 中拆分的主要内容,如果未能解决你的问题,请参考以下文章