我正在应用SMOTE (DMwR包),因为我有一个类不平衡的问题。然而,我有三个类的结果,而不是两个。
该函数正确地对少数类进行过采样,但我没有遵循多数/中间类的行为(即,所有类别都包含不同的样本大小)。
比方说:
library(DMwR)
set.seed(1234)
train = data.frame(group=as.factor(rep(c(1,2,3),c(35,110,220))),
score=rnorm(365,100))
train_resample <- SMOTE(group ~ ., train, perc.over = 400, perc.under=200)
table(train_resample$group)
# 1 2 3
# 175 104 176
少数类是有意义的,35+(35*4) = 175。另外,剩余的样本也很清楚,140*200/100 = 280。但是,我不确定这个示例是如何分布在其余类上的。它保留了样本大小的顺序,但可能是随机的。
有什么想法吗?
发布于 2020-04-03 08:31:31
您可以尝试UBL包中的SmoteClassif()函数。该函数允许您指定要对每个类进行欠采样或重采样的百分比。
https://stackoverflow.com/questions/42690284
复制