【发布时间】:2020-11-02 09:23:37
【问题描述】:
我正在研究一个二元分类问题,我有一个不平衡的数据集。我想创建一个新的更平衡的数据集,每个类有 50% 的观察。为此,我在 R 中使用由DMwR library 提供的 SMOTE 算法。
在新的数据集中,我想保持多数类的观察值不变。
但是,我遇到了两个问题:
- 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 值。
得到的结果如下图所示:
【问题讨论】:
标签: r machine-learning imbalanced-data smote