我正在研究一个二进制分类问题,我有一个不平衡的数据集。我想创建一个新的更平衡的数据集,每个类有 50% 的观察。为此,我在 R 中使用由DMwR library
.
在新数据集中,我想保持多数类的观察结果不变。
但是,我遇到了两个问题:
- SMOTE 减少或增加多数类的观察数量(我只想增加少数类的数量)。
- SMOTE 生成的一些观测值包含 NA 值。
假设我有 20 个观察结果:多数类中有 17 个观察结果,少数类只有 3 个观察结果。这是我的代码:
library(DMwR)
library(dplyr)
sample_data <- data.frame(matrix(rnorm(200), nrow=20))
sample_data[1:17,"X10"] <- 0
sample_data[18:20,"X10"] <- 1
sample_data[,ncol(sample_data)] <- factor(sample_data[,ncol(sample_data)], levels = c('1','0'), labels = c('Yes','No'))
newDataSet <- SMOTE(X10 ~., sample_data, perc.over = 400, perc.under = 100)
在我的代码中,我修复了perc.over = 400
创建少数类的 12 个新观察值,并且我修复perc.under = 100
了在多数类中保持不变。
但是,当我检查 newDataSet 时,我观察到 SMOTE 将多数类的数量从 17 减少到 12。此外,一些生成的观察值具有 NA 值。
下图显示了获得的结果: