【问题标题】:How to use combination of over- and undersampling? with imbalanced learn如何使用过采样和欠采样的组合?学习不平衡
【发布时间】:2020-02-09 16:04:19
【问题描述】:

我想重新采样一些大数据(班级规模: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})

【问题讨论】:

    标签: python machine-learning oversampling imblearn imbalanced-data


    【解决方案1】:

    您似乎只有 32 条记录,类为 9,因此它对该类进行采样并将其数据记录与 0 类的数据记录对齐,因此是 9: 968

    您正在谈论将数据集减少到 100 条记录,您可以从 XY(相同的 100 条记录)中随机抽取 100 条记录,或者像 y_resamp[:100] 一样抽取前 100 条记录

    【讨论】:

    • 是的,你是对的,我只是期待像SMOTETomek 这样的过采样和欠采样的组合可以一步完成。现在我首先通过data_all[labels_all==0].sample(100) 对0 类进行下采样,然后使用'SMOTE' 对减少的数据集进行过采样。我只是希望有一个更复杂的解决方案作为随机下采样。我正在将 850 万个观测值下采样到 10.000 个,所以我希望有办法获得 10.000 个最多样化的观测值。
    猜你喜欢
    • 1970-01-01
    • 2017-10-29
    • 1970-01-01
    • 2020-03-11
    • 2019-12-19
    • 2020-02-15
    • 1970-01-01
    • 2019-09-03
    • 2020-03-05
    相关资源
    最近更新 更多