r - 将数据拆分为不具有代表性类别的训练和评估数据集

标签 r machine-learning statistics classification

我有一个数据集,其中有 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/

相关文章:

r - r-ggplot2-突出显示选定的点和奇怪的行为

r - 使用 rCharts hPlot 显示多个时间序列

删除数据框列表中的部分列名称 - R

java - 使用 liblinear (java) 进行概率预测,直接在代码中使用分类器

c++ - 二维数据点集的加权线性最小二乘法

r - 导出可发表论文的 R 回归摘要

java - Flappy Bird 遗传算法种群改进

machine-learning - tf-idf 中的文档和语料库是什么?

r - 使用 R,如何使用已知的均值、中位数、百分位数来估计分布?

r - r 的显着差异