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
相关文献

参考链接:
网友评论