【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