我正在执行二进制分类,而我当前的目标类包括:
差: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/