过采样:Python 中二进制和分类数据的 SMOTE
Posted
技术标签:
【中文标题】过采样:Python 中二进制和分类数据的 SMOTE【英文标题】:Oversampling: SMOTE for binary and categorical data in Python 【发布时间】:2018-05-19 05:50:54 【问题描述】:我想将 SMOTE 应用于包含二进制、分类和连续数据的不平衡数据集。有没有办法将 SMOTE 应用于二进制和分类数据?
【问题讨论】:
【参考方案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)
【讨论】:
您好,如果数据集具有离散和分类特征,您知道我应该使用什么吗? 您只需要在第二行提到上面提到的分类特征索引。离散的功能,它会自动照顾。 您好,我也有类似的问题。如果您有时间,可以在此相关帖子上请求您的帮助吗? ***.com/questions/71193740/…【参考方案2】:截至 2018 年 1 月,此问题尚未在 Python 中实现。以下是来自团队的reference。事实上,如果有人想实施,他们愿意接受提案。
Chawla & Bowyer 的 paper (web archive) 对于那些对这个持续性问题有学术兴趣的人,在第 6.1 节中解决了这个 SMOTE-Non Continuous 抽样问题。
更新:此功能已于 2018 年 10 月 21 日实施。服务请求现已关闭。
【讨论】:
链接到纸张已损坏,但可以在此处找到 Wayback Machine 中最新版本的链接:web.archive.org/web/20180413091607/https://www.jair.org/media/…【参考方案3】:因此,根据文档,SMOTE 尚不支持 Python 中的分类数据,并提供连续输出。
您可以采用一种解决方法,将分类变量转换为整数并使用 SMOTE。
然后使用np.round(X_train[categorical_variables])
将它们转换回各自的分类值。
【讨论】:
此解决方案不太适合顺序无意义的名义数据。例如,我们将女装、汽车、女鞋类编码为 0、1、2。然后,使用 SMOTE,我们抽取 2 个样本,其中一个具有类别 0,另一个具有类别 2,我们最终进行插值,使得舍入值为 1。最终结果将是我们生成的数据样本被分类为 ' Car'类,而父母属于女装女鞋,完全没有意义。 能否将分类数据转换成one-hot-encoding然后应用SMOTE。 现在,这个功能已经被他们以SMOTENC的形式发布了,它可以处理数字和分类变量以上是关于过采样:Python 中二进制和分类数据的 SMOTE的主要内容,如果未能解决你的问题,请参考以下文章