我有一个名为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)
更多信息请参见这里。