如何在训练集和测试集之间划分数据集,同时保持两组中目标变量的比率?

时间:2018-07-28 10:26:48

标签: r machine-learning training-data

我有一个数据集,打算使用training settesting setmachine learning之间进行拆分,以进行R分析。

假设基于目标变量(称为MyDataset,我的数据集(称为Leaver)的比率为是(60%)和否(40%),那么如何确保分裂会同时在训练组和测试组中保持该比例吗?

2 个答案:

答案 0 :(得分:1)

您想要做的是对数据集进行分层拆分。您可以使用脱字号包中的createDataPartition进行此操作。只需确保将Leaver变量设置为一个因子即可。

请参见下面的代码示例。

library(caret)
data(GermanCredit)

prop.table(table(GermanCredit$Class))
 Bad Good 
 0.3  0.7 
index <- createDataPartition(GermanCredit$Class, p = 0.6, list = FALSE)

# train
prop.table(table(GermanCredit$Class[index]))
 Bad Good 
 0.3  0.7 
#test
prop.table(table(GermanCredit$Class[-index]))
 Bad Good 
 0.3  0.7 

答案 1 :(得分:1)

不带包装:

GermanCredit$id<-1:dim(GermanCredit)[1]

bad_id<-sample(GermanCredit$id[GermanCredit$Class=="Bad"],0.6*.3*300)
good_id<-sample(GermanCredit$id[GermanCredit$Class=="Good"],0.6*.7*300)

train_index<-sample(c(bad_id,good_id))
#train set
prop.table(table(GermanCredit$Class[train_index]))
Bad Good 
0.3  0.7 

#test
prop.table(table(GermanCredit$Class[-train_index]))
Bad Good 
0.3  0.7