我有一个名为df1的数据框,它将用于machine learning分析。
根据目标变量(Attrition),数据框df1中YES:NO的比例为60:40
我需要从df1重新创建一个新的数据框,使得Yes/No的目标变量变成50:50
我的挑战在于,我希望在新的数据框中保留Attrition=NO的所有记录(即df1的40%),并且希望R随机从df1中Attrition=YES的记录中抽取剩余的50%。
假设我的新数据框将被称为df2,我该如何做呢?
回答:
首先,60:40并不算是不平衡的。
但是,您可以使用caret包中的函数:
library(caret)set.seed(123)# 这会对多数类进行下采样df2 <- downSample(x = df1[, -which(colnames(df1)=="Attrition")], y = df1$Attrition)# 这会对少数类进行上采样df2 <- upSample(x = df1[, -which(colnames(df1)=="Attrition")], # 假设Attrition是df1中的最后一列 y = df1$Attrition)
更多信息请参见这里。