我正在执行二进制分类,而我当前的目标类包括:
差:3126差:25038

因此,我希望不良(少数)示例的数量等于良好示例(1:1)的数量。
因此,坏的需要增加大约8倍(额外的21912个SMOTEd实例),而不能增加大多数(好)。我正在尝试的代码不会像目前一样保持Good的数量不变。

我尝试过的代码:

范例1:

library(DMwR)
smoted_data <- SMOTE(targetclass~., data, perc.over=700, perc.under=0, k=5, learner=NULL)

示例1的输出:
坏:25008好:0

范例2:
smoted_data <- SMOTE(targetclass~., data, perc.over=700, k=5, learner=NULL)

示例2的输出:
差:25008差:43764

范例3:
smoted_data <- SMOTE(targetclass~., data, perc.over=700, perc.under=100, k=5, learner=NULL)

示例3的输出:
差:25008差:21882

最佳答案

要使用SMOTE实现1:1的平衡,您需要执行以下操作:

library(DMwR)
smoted_data <- SMOTE(targetclass~., data, perc.over=100)

我必须承认,从内置文档看来,它似乎并不明显,但是如果您阅读原始文档,它会指出:



因此,当perc.over为100时,您实际上创建了1个新示例(100/100 = 1)。
perc.under的默认值为200,这就是您要保留的值。


prop.table(table(smoted_data$targetclass))
# returns 0.5  0.5

关于r - 如何平衡不平衡分类1 :1 with SMOTE in R,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36651596/

10-12 21:17