【R>>DMwR】SMOTE处理样本数据不平衡

作者: 高大石头 | 来源:发表于2021-07-21 22:59 被阅读0次

DMwR包是"Data Mining with R"首字母的缩写,今天来学习下包中SMTOE功能。

知识点

在实际科研过程中往往会存在某类样本远多于或远少于其他类样本,从而导致一些机器学习模型的失效。目前解决这类问题的常见方法有两类,上采样(过采样)和下采样(负采样)。

  • 上采样:将稀有时间复制几分后添加到样本集中;
  • 下采样:直接只取一定百分比的多数类样本作为训练集。
  • SMOTE:Supersampling Rare Events,稀有事件超级采样。是用的比较多的上采样方法。

例子

rm(list = ls())
library(DMwR)
data("iris")
data <- iris[,c(1,2,5)]
data$Species <- factor(ifelse(data$Species=="setosa","rare","common"))
table(data$Species)
# common   rare 
 #  100     50 

common:rare=2:1,然后可以用DMwR::SMTOE进行不平衡处理。
来看下SMOTE的参数:

SMOTE(form, data, perc.over = 200, k = 5, perc.under = 200, learner = NULL, ...)
  • form: 描述预测问题的公式
  • data:原始不平衡数据
  • 假设初始数据集中有N个少数样本和M个多数的样本,perc.over=a,perc.under=b。首先增加少数派样本的数量,平均每个样本增加a/100个新样本,一共新增了aN/100个全新的少数派样本,并把最初的少数派样本和新增的少数派样本都放入新的数据集中。然后对多数派的样本进行采样,采样数量为(b/100) * aN/100,得到新的多数派样本,将新的多数派样本放入到新的数据集中,这样新的数据集中,少数派样本有(1+a/100)N个,多数派样本有(b/100) * aN/100个,perc.over 不能为0
newData <- SMOTE(Species~.,data,perc.over = 600,perc.under = 100)
par(mfrow = c(1, 2))
plot(data[, 1], data[, 2], pch = 19 + as.integer(data[, 3]),
     main = "Original Data")
plot(newData[, 1], newData[, 2], pch = 19 + as.integer(newData[,3]),
     main = "SMOTE'd Data")
table(newData$Species)
# common   rare 
#   300    350 

相关文献

PMID: 33553172

参考链接:

相关文章

网友评论

    本文标题:【R>>DMwR】SMOTE处理样本数据不平衡

    本文链接:https://www.haomeiwen.com/subject/iausmltx.html