python - 如何结合使用过采样和欠采样?学习不平衡

标签 python machine-learning oversampling imblearn imbalanced-data

我想对一些大数据重新采样(类大小:8mio vs 2700) 我希望通过对 2 类进行过采样和对 1 类进行欠采样来获得每个 50.000 个样本。 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 条记录) )或取前 100 个,如 y_resamp[:100]

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

相关文章:

tensorflow - 为什么Tensorflow的MirroredStrategy和OneDevicestrategy在colab上不起作用?

machine-learning - 如何在交叉验证中使用过采样数据?

python - 我如何将 SMOTE 应用于多类文本数据

python - 我想从 TFRecord 读取数据

machine-learning - 有没有办法快速决定使用哪些变量进行模型拟合和选择?

python - 如何在管道中重新采样文本(不平衡组)?

python - uWSGI 说 : "ImportError: No module named wsgi"

python - 当您不能保证列表至少为 N 长度时,将列表截断为 N 个索引的大多数 pythonic 方法?

python - 尝试绘制迭代但 plt.plot 为空

python - 将图像从 [-1; 1]到[0; 255]