拆分列车/测试集R
在我的数据集中,有一列包含NPS数据,其中数字从0变为10。10和9被称为“促进者”,8和7被称为“被动者”,6-0被称为“批评者”。我计划通过将变量NPS作为二进制(发起人和非发起人)来拟合模型。因此,我希望在执行glm之前将数据拆分为训练集和测试集。为了使培训集具有代表性,我尝试在数据集中包含50%的发起人和50%的非发起人 我的第一个问题:这是一个有效的方法吗 第二个问题:我在下面的代码中尝试分割数据集,并且能够生成训练集拆分列车/测试集R,r,split,dataset,glm,sample,R,Split,Dataset,Glm,Sample,在我的数据集中,有一列包含NPS数据,其中数字从0变为10。10和9被称为“促进者”,8和7被称为“被动者”,6-0被称为“批评者”。我计划通过将变量NPS作为二进制(发起人和非发起人)来拟合模型。因此,我希望在执行glm之前将数据拆分为训练集和测试集。为了使培训集具有代表性,我尝试在数据集中包含50%的发起人和50%的非发起人 我的第一个问题:这是一个有效的方法吗 第二个问题:我在下面的代码中尝试分割数据集,并且能够生成训练集 table(mydata$NPS) # 0 1
table(mydata$NPS)
# 0 1 2 3 4 5 6 7 8 9 10
# 18 31 49 62 90 217 514 2332 10600 6557 2003
nrow(mydata) # = 22473
#total number of promoters = 8560
#total number of non-promoters = 13913
8560*0.8 #=6848 80% of promoters count
#all the promoters
data_promoters<-mydata[(mydata$NPS==10 | mydata$NPS==9),]
#all the non promoters
data_nonPromoters<-mydata[(mydata$NPS!=10 & mydata$NPS!=9),]
dim(data_promoters) #8560 32
dim(data_nonPromoters) #13913 32
set.seed(100)
sample_promoters <- data_promoters[sample(1:nrow(data_promoters),6848),]
sample_nonPromoters <- data_nonPromoters[sample(1:nrow(data_nonPromoters),6848),]
#train dataset
train_mydata <- rbind(sample_promoters, sample_nonPromoters)
head(train_mydata)
tail(train_mydata)
dim(train_mydata) #13696 32
#test dataset
test_mydata<-mydata[-train_mydata, ]
您可以使用
dplyr
中的anti_join
从mydata
中获取train_mydata
中不存在的行
test_mydata <- dplyr::anti_join(mydata, train_mydata)
test\u mydatatrain\u mydata
是一个data.frame
,因此它是一个列表
。在对mydata进行子集设置时,只能使用向量作为索引,但此处使用的是列表,因此出现错误无效的下标类型“list”
在这种情况下,我通常会给每一行一个ID,然后简单地
test_mydata <- mydata[!(mydata$ID %in% train_mydata$ID), ]
test\u mydata您的第一个问题听起来像是一个统计分析问题,最好是在交叉验证(统计堆栈交换站点)上。当我为序列集选择一个随机样本时(代码:train_mydata4@user13178113我不明白您所说的是什么意思,它从原始数据集中选择第一组行。如果cr_mydata4.selected
包含所有行,您可以在train_mydata4
中随机选择行,现在可以进行测试\u mydata4我检查了train和test的ID。)set.head(data.frame(as.integer(rownames(train_mydata4)))
111399210249318345454519951995117406610449
head(data.frame(as.integer(rownames(test_mydata4)))
1 1 2 3 4 4 5 6列车组的行ID为11399、10249、18345、5199、17406、10449等,测试组的行ID为1、2、3、4、5、6,因此,列车组看起来是随机的,而后者看起来不是随机的。你可能应该用这些细节问一个新问题。
test_mydata <- mydata[!(mydata$ID %in% train_mydata$ID), ]