您需要对函数中可用的两个参数进行一些操作:perc.over
和perc.under
.
根据来自的文档SMOTE
:
参数 perc.over 和 perc.under 分别控制少数类的过采样量和多数类的欠采样量。
所以:
perc.over 通常是 100 以上的数字。使用这种类型的值,对于属于少数类的原始数据集中的每个案例,将创建 perc.over/100 该类的新示例
我看不到您的数据,但是,如果您的少数类有 100 个案例,并且perc.over=100
,该算法将从该类生成 100/100 = 1 个新案例。
参数 perc.under 控制将随机选择用于最终“平衡”数据集的多数类案例的比例。这个比例是根据新生成的少数类案例的数量来计算的。
因此,例如,一个值perc.under=100
将从原始数据的多数类中选择与为少数类生成的观察量相同的观察量。
在我们的示例中,仅生成了 1 个新案例,因此它将仅添加另一个案例,从而生成包含 2 个案例的新数据集。
我建议使用大于 100 的值perc.over
,甚至更高的值perc.under
(默认值为 100 和 200)。
请记住,您正在添加在少数群体中不真实的新观察,我会尽量控制这些。
数字示例:
set.seed(123)
data <- data.frame(var1 = sample(50),
var2 = sample(50),
out = as.factor(rbinom(50, 1, prob=0.1)))
table(data$out)
# 0 1
# 43 7 # 50 rows total (original data)
smote_data <- DMwR::SMOTE(out ~ var1, data, perc.over = 200, perc.under = 400)
table(smote_data$out)
# 0 1
# 56 21 # 77 rows total (smote data)