2016-04-15 76 views
0

我现在的目标类组成: 坏:3126好:25038如何平衡1:R中与SMOTE 1

所以我想坏(少数)实例的个数等于很好的例子数(1:1)。 所以不好的需要增加〜8倍(额外的21912 SMOTEd实例),而不是增加大多数(好)。我正在尝试的代码不会保持好的数量不变。

代码我曾尝试:

实施例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

回答

0

您可以尝试使用ROSE包河

与例如一篇研究文章,请here

0

你应该使用114.423的perc.under。由于(700/100)x3126x(114.423/100)= 25038.04。

但请注意,由于SMOTE会为大多数类别进行随机欠采样,因此您可以通过这种方式在大多数类别中获得重复的新数据。也就是说,您的新数据将包含25038个GOOD样本,但与原始数据不同,它们与25038个GOOD样本不同。一些好样品不会被包括在内,有些会被复制到新生成的数据中。

0

我建议你使用我开发的bimba软件包。它尚未在CRAN上提供,但您可以从github轻松安装它。

您可以找到如何对其GitHub的网页上安装它的说明: https://github.com/RomeroBarata/bimba

上的使用bimba实施SMOTE功能的数据,唯一的限制是预测必须是数字和目标必须是保存数据的数据框的最后一列,并且只有两个值。

只要你的数据遵守这些限制,使用SMOTE功能很简单:

library(bimba) 
smoted_data <- SMOTE(data, perc_min = 50, k = 5) 

perc_min指定过采样(在这种情况下perc_min = 50平衡的类后少数类的所需的百分比)。请注意,大多数课程并未采用DMwR包中的欠采样方式。