【问题标题】:SMOTE oversampling creates new data-pointsSMOTE 过采样创建新的数据点
【发布时间】:2020-06-28 11:33:57
【问题描述】:

我正在尝试解决一个不平衡的分类问题,所有输入特征都是分类的。 以下是每个特征的值计数:

 for i in X_train.columns:
    print(i+':',X_train[i].value_counts().shape[0])

 Pclass: 3
 Sex: 2
 IsAlone: 2
 Title: 5
 IsCabin: 2
 AgeBin: 4
 FareBin: 4

在 train_test_split 之后对训练数据应用 SMOTE。创建了一些新值,这些值不存在于 X_train 数据集中。

 from imblearn.over_sampling import SMOTE
 from collections import Counter
 #removing the random_state dosent help
 sm = SMOTE(random_state=0)
 X_res, y_res = sm.fit_resample(X_train, y_train)
 print('Resampled dataset shape %s' % Counter(y_res))

 Resampled dataset shape Counter({1: 381, 0: 381})

重采样数据集的值计数:

 Pclass: 16
 Sex: 7
 IsAlone: 2
 Title: 12
 IsCabin: 2
 AgeBin: 4
 FareBin: 4

使用 SMOTE 创建了新值,创建了 under_sampling 新值也是如此。这些新值不存在于测试数据集中。

例子:

X_train-Pclass 1-20,2-15,3-40
X_res-Pclass 1-20,0.999999-3,2-11,1.9999999-4,3-34,2.9999999-6

我的问题:

  1. 为什么要创建这些价值观,它们是否具有某种重要性?

  2. 如何处理它们?我应该将它们四舍五入还是删除它们

  3. 有没有办法在不创建这些新值的情况下执行过采样和欠采样?

【问题讨论】:

    标签: python oversampling smote


    【解决方案1】:

    如果数据集的类分布不均匀,这可能会给训练和分类的后期阶段带来麻烦,因为分类器用于学习特定类特征的数据将非常少。

    与正常的上采样不同,SMOTE 利用最近邻算法生成可用于训练模型的新合成数据。

    正如this original paper of SMOTE 中所说,“通过获取每个少数类样本并沿连接任何/所有 k 个少数类最近邻的线段引入合成示例,对少数类进行过采样。"

    所以是的,这些新生成的合成数据点很重要,您不必太担心它们。 SMOTE 是执行此任务的最佳技术之一,因此我建议使用它。

    以下面的图片为例: 图 a 有更多 class 0 的数据点,而 class 1 的数据点很少。

    如您所见,应用 SMOTE 后(图 b),它将为 minority 类生成新的数据点(在本例中) , 对于 class 1) 以平衡数据集。


    尝试阅读:

    1. http://rikunert.com/SMOTE_explained

    2. https://machinelearningmastery.com/smote-oversampling-for-imbalanced-classification/

    【讨论】:

    • 你好@Harshil 我想知道在用于未来预测时,过采样创建的新数据点是否会影响模型的数据预测?
    猜你喜欢
    • 2020-07-05
    • 1970-01-01
    • 2019-05-24
    • 1970-01-01
    • 2019-05-09
    • 1970-01-01
    • 2015-10-29
    • 2018-05-19
    • 2018-12-02
    相关资源
    最近更新 更多