【问题标题】:Oversampling: SMOTE for binary and categorical data in Python过采样:Python 中二进制和分类数据的 SMOTE
【发布时间】:2018-05-19 05:50:54
【问题描述】:

我想将 SMOTE 应用于包含二进制、分类和连续数据的不平衡数据集。有没有办法将 SMOTE 应用于二进制和分类数据?

【问题讨论】:

    标签: python-3.x imputation


    【解决方案1】:

    根据文档,现在可以使用 SMOTENC 来实现。 SMOTE-NC 能够处理分类和连续特征的混合。

    这是来自documentation的代码:

    from imblearn.over_sampling import SMOTENC
    smote_nc = SMOTENC(categorical_features=[0, 2], random_state=0)
    X_resampled, y_resampled = smote_nc.fit_resample(X, y)
    

    【讨论】:

    • 您好,如果数据集具有离散和分类特征,您知道我应该使用什么吗?
    • 您只需要在第二行提到上面提到的分类特征索引。离散的功能,它会自动照顾。
    • 您好,我也有类似的问题。如果您有时间,可以在此相关帖子上请求您的帮助吗? stackoverflow.com/questions/71193740/…
    【解决方案2】:

    截至 2018 年 1 月,此问题尚未在 Python 中实现。以下是来自团队的reference。事实上,如果有人想实施,他们愿意接受提案。

    Chawla & Bowyer 的 paper (web archive) 对于那些对这个持续性问题有学术兴趣的人,在第 6.1 节中解决了这个 SMOTE-Non Continuous 抽样问题。

    更新:此功能已于 2018 年 10 月 21 日实施。服务请求现已关闭。

    【讨论】:

    【解决方案3】:

    因此,根据文档,SMOTE 尚不支持 Python 中的分类数据,并提供连续输出。

    您可以采用一种解决方法,将分类变量转换为整数并使用 SMOTE。

    然后使用np.round(X_train[categorical_variables]) 将它们转换回各自的分类值。

    【讨论】:

    • 此解决方案不太适合顺序无意义的名义数据。例如,我们将女装、汽车、女鞋类编码为 0、1、2。然后,使用 SMOTE,我们抽取 2 个样本,其中一个具有类别 0,另一个具有类别 2,我们最终进行插值,使得舍入值为 1。最终结果将是我们生成的数据样本被分类为 ' Car'类,而父母属于女装女鞋,完全没有意义。
    • 能否将分类数据转换成one-hot-encoding然后应用SMOTE。
    • 现在,这个功能已经被他们以SMOTENC的形式发布了,它可以处理数字和分类变量
    猜你喜欢
    • 2018-12-02
    • 1970-01-01
    • 1970-01-01
    • 2018-12-27
    • 2019-05-09
    • 2018-12-24
    • 2020-06-28
    • 2019-05-24
    • 2020-07-05
    相关资源
    最近更新 更多