在python中平衡的多类分类(过采样)

时间:2018-06-10 18:47:58

标签: python python-3.x classification sample oversampling

我有以下问题,有分类问题。在轨道上有50,000行,在Y 60标签上。但是数据是不平衡的(在一个类中,35000个值,在其他59个类中15000个值,其中在30个值中)。例如,即X(column_1,column_2,column_3)和Y:

colum_1   colum_2   colum_3   Y
  0.5        1         2      1
  0.5        1.1       2      1
  0.55       0.95      3      1
  0.1        1         2      2
  0.15       0.99      2      2
  0.05       1.01      2      2 
  2          0.9       3      3
  1.95       0.95      3      3
  2.05       0.85      3      3

需要添加"嘈杂"数据,以便在条件上没有不平衡,所有值都变得相同:

e:\b\build\slave\windows_engine\build\src\third_party\dart\runtime\vm\scavenger.cc: 411: error: Out of memory.
Dumping native stack trace for thread 2750
  [0x00007ff676324b63] Dart_IsPrecompiledRuntime
  [0x00007ff676324b63] Dart_IsPrecompiledRuntime
-- End of DumpStackTrace

只有这是一个玩具的例子,但我有很多含义。

1 个答案:

答案 0 :(得分:-1)

虽然问题不是很明确,但我认为您正在寻找过多采样少数民族课程的帮助。常见的方法是SMOTE算法,您可以在imblearn包中找到。

from imblearn.over_sampling import SMOTE
sm = SMOTE(random_state=42, ratio = 1.0)
X_res, Y_res = sm.fit_sample(X_train, Y_train)

请确保先将数据划分为列车和测试组,然后分别对每个组进行过度采样,这样您就不会在两者中都使用相同的数据。更全面的描述here