过采样:Python 中二进制和分类数据的 SMOTE

Oversampling: SMOTE for binary and categorical data in Python

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

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

您可以改用变通方法,将分类变量转换为整数并使用 SMOTE。

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

截至 2018 年 1 月,此问题尚未在 Python 中实施。以下是来自团队的 reference。事实上,如果有人想实施它,他们对提案持开放态度。

对于那些对这个正在进行的问题有学术兴趣的人,来自 Chawla & Bowyer 的 paper (web archive) 在第 6.1 节中解决了这个 SMOTE-非连续采样问题。

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

根据文档,现在可以使用 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)