我有一个数据集,其中有 130000 条记录和 15 个变量。
我想要描述的变量是IsActive
。问题是这个变量设置为1的记录只有15000条,其余都设置为0。
首先,我想将源数据拆分为两个数据集:
20% ~30k 记录 -> 训练数据集
80% ~120k 记录 -> 验证数据集。
我希望训练数据集中有 5k 条 active = 1
记录,验证数据集中有 10k 条 active = 1
记录,并且易于调整。
我该怎么做?
我已经做的是:
set.seed(2)
ind <- sample(2, nrow(mydata), replace = TRUE, prob=c(0.8, 0.2))
当我想获取 80% 的数据集时:
newdata=mydata[ind == 1,]
最佳答案
你的问题仍然没有意义:130,000 的 20% 不是 30,000。解决所有逻辑不一致的最简单假设是数据集有 150,000 条记录,所以我使用了它。
这是一种方法:
# sample data
set.seed(1) # for reproducible example
df <- data.frame(id=1:150000,
IsActive=sample(0:1,150000,replace=T,p=c(0.9,0.1)),
x=rnorm(150000), y=runif(150000),z=rpois(150000,l=1))
sum(df$IsActive==1) # validate
# [1] 14887
s1 <- sample(which(df$IsActive==1),5000)
s2 <- sample(which(df$IsActive==0),25000)
train <- df[c(s1,s2),]
test <- df[c(-s1,-s2),]
# validate
any(test$id %in% train$id) # train and test are disjoint
# [1] FALSE
sum(train$IsActive==1) # 5000
# [1] 5000
sum(test$IsActive==1) # the rest
# [1] 9887
关于r - 将数据拆分为不具有代表性类别的训练和评估数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23594940/