【问题标题】:Steps for a highly imbalanced classification steps. Should I up-sample & under-sample data or just up-sample the imbalanced class高度不平衡的分类步骤的步骤。我应该对数据进行上采样和欠采样还是对不平衡类进行上采样
【发布时间】:2020-08-30 01:39:58
【问题描述】:

我有一个高度不平衡的二元(是/否)分类数据集。 该数据集目前有大约 0.008% 的“是”。

我需要使用 SMOTE 平衡数据集。

我遇到了两种处理不平衡的方法。 在变量上运行 MinMaxScaler 后的以下步骤

from imblearn.pipeline import Pipeline
oversample = SMOTE(sampling_strategy = 0.1, random_state=42)
undersample = RandomUnderSampler(sampling_strategy=0.5, random_state=42)
steps = [('o', oversample), ('u', undersample)]
pipeline = Pipeline(steps=steps)
x_scaled_s, y_s = pipeline.fit_resample(X_scaled, y)

这导致数据集的大小从 240 万行减少到 732000 行 并且不平衡从 0.008% 提高到 33.33%

虽然这种方法

sm = SMOTE(random_state=42)
X_sm , y_sm = sm.fit_sample(X_scaled, y)

这会将行数从 240 万行增加到 480 万行,现在不平衡率为 50%。

在这些步骤之后,我需要将数据拆分为训练测试数据集......

这里的正确方法是什么?

在选择这些方法之前,我需要考虑哪些因素?

我应该对非抽样数据运行 X_test, y_test。这意味着,我拆分数据并仅对训练数据进行上采样/欠采样。

谢谢。

京东

【问题讨论】:

    标签: python-3.x imbalanced-data smote


    【解决方案1】:

    在这些步骤之后,我需要将数据拆分为训练测试数据集......

    不!任何重采样技术都应该只应用于训练集。这将确保测试集反映现实。在这样的测试集上获得的模型性能将很好地估计您的模型的泛化能力。如果对整个数据集执行重采样,您的模型的性能将过于乐观。

    步骤:

    1. 将数据集拆分为训练集和测试集。
    2. 上采样/下采样训练集。
    3. 在重新采样的训练集上训练您的模型。
    4. 在未修改的测试集上估计性能。

    【讨论】:

      猜你喜欢
      • 2017-10-29
      • 1970-01-01
      • 2020-09-06
      • 1970-01-01
      • 2020-03-11
      • 1970-01-01
      • 1970-01-01
      • 2020-02-15
      • 2014-01-09
      相关资源
      最近更新 更多