我有一个高度不平衡的二进制(是/否)分类数据集。该数据集目前有大约 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。这意味着,我拆分数据并仅对训练数据进行上采样/欠采样。
谢谢你。
京东