2016-04-15 78 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包中的欠採樣方式。