我想对一些大数据进行重新采样(类大小:8mio和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})
答案 0 :(得分:1)
到底是什么问题,看来您只有32个记录为类9
,所以它对该类进行了过度采样,并将其数据记录与类0
的数据记录对齐,因此9: 968
< / p>
您正在谈论将数据集减少到100条记录,您可以对X
和Y
(相同的100条记录)的每个类别随机抽取100条记录,或者获取前100条记录像y_resamp[:100]