Как использовать комбинацию избыточной и недостаточной выборки? с несбалансированным учиться - PullRequest
1 голос
/ 12 октября 2019

Я хочу повторно сэмплировать некоторые большие данные (размеры классов: 8 миллионов против 2700). Мне бы хотелось иметь 50 000 выборок для каждой из них, используя классы избыточной выборки 2 и класс 1 пониженной выборки. Кажется, что imblearn предлагает комбинацию избыточной и недостаточной выборки, но я непонять, как это работает.

from collections import Counter
from imblearn.over_sampling import SMOTENC
from imblearn.under_sampling import TomekLinks
from imblearn.combine import SMOTETomek

smt = SMOTETomek(random_state=1)
X_resamp, y_resamp = smt.fit_resample(data_all[29000:30000], labels_all[29000:30000])

До того, как данные выглядели как

>>Counter(labels_all[29000:30000])
>>Counter({0: 968, 9: 32})

, а затем

>>Counter(y_resamp)
>>Counter({0: 968, 9: 968})

, как я ожидал или желал что-то вроде

>>Counter(y_resamp)
>>Counter({0: 100, 9: 100})

1 Ответ

1 голос
/ 14 октября 2019

В чем именно проблема, кажется, у вас есть только 32 записи с классом 9, так что выборка этого класса и сравнение его записей с записями класса 0, следовательно, 9: 968

вымы говорим об уменьшении набора данных до 100 записей, вы можете сделать это путем выборки 100 записей случайным образом для каждого класса, от X и Y (те же 100 записей) или взять первые 100 как y_resamp[:100]

...