Мультиклассовая классификация для баланса в питоне (по выборке)

У меня есть следующая проблема, есть проблема классификации. На трассе 50000 строк, на 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
  2          0.9       3      3

И нужно добавить "шумные" данные, чтобы не было условного дисбаланса, чтобы все значения стали одинаковыми:

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

Только это игрушечный пример, но у меня много значений.

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)

Просто убедитесь, что вы сначала поделили свои данные на группы обучения и тестирования, а затем провели избыточную выборку для каждой группы отдельно, чтобы не заканчиваться одинаковыми данными в обеих группах. Более полное описание здесь.

Другие вопросы по тегам