我想对一些大数据进行重采样(类大小: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})

最佳答案

到底是什么问题,看来您只有32个记录为9类,因此它对该类进行了采样,并将其数据记录与0类的数据记录对齐,因此为9: 968

您正在谈论将数据集减少到100条记录,您可以对每个类别从XY(相同的100条记录)中随机抽取100条记录,也可以像y_resamp[:100]那样获取前100条记录

关于python - 如何结合使用过采样和欠采样?学习失衡,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58352912/

10-12 19:29
查看更多