machine-learning - 用于不平衡二元分类的过采样数据的过程

标签 machine-learning scikit-learn classification train-test-split imbalanced-data

对于 0 类(少数类)和 1 类(多数类),我大约有 30% 和 70%。由于我没有大量数据,因此我计划对少数类别进行过采样,以平衡各个类别,形成 50-50 的分割。我想知道是否应该在将数据分成训练集和测试集之前或之后进行过采样。我通常在在线示例中看到它在拆分之前完成,如下所示:

df_class0 = train[train.predict_var == 0]
df_class1 = train[train.predict_var == 1]
df_class1_over = df_class1.sample(len(df_class0), replace=True)
df_over = pd.concat([df_class0, df_class1_over], axis=0)

但是,这是否意味着测试数据可能会包含训练集中的重复样本(因为我们对训练集进行了过采样)?这意味着测试性能不一定是针对新的、未见过的数据。我这样做很好,但我想知道什么是好的做法。谢谢!

最佳答案

I was wondering if oversampling should be done before or after splitting my data into train and test sets.

它当然应该在分割之后完成,即它应该仅应用于您的训练集,而不是应用于您的验证和测试集;另请参阅我的相关答案 here .

I have generally seen it done before splitting in online examples, like this

从您显示的代码片段来看,正如您所说,它根本不明显是在拆分之前完成的。这取决于 train 变量到底是什么:如果它是训练-测试分割的乘积,那么过采样实际上是在分割之后发生的,正如它应该的那样.

However, wouldn't that mean that the test data will likely have duplicated samples from the training set (because we have oversampled the training set)? This means that testing performance wouldn't necessarily be on new, unseen data.

确切地说,这就是为什么过采样应该在分割到训练测试之后而不是之前进行的原因。

(我曾经目睹过一个案例,建模者很难理解为什么他获得了约 100% 的测试准确率,远高于他的训练准确率;结果他的初始数据集充满了重复项 - 这里没有类别不平衡,但是这个想法是相似的 - 并且这些重复项中的几个自然地在分割后出现在他的测试集中,当然不是新的或看不见的数据......)。

I am fine doing this

你不应该:)

关于machine-learning - 用于不平衡二元分类的过采样数据的过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51064462/

相关文章:

python - tensorflow slim : 'module' object has no attribute 'sum_of_squares'

python - 为什么 MNIST 图像是 1x28x28 张量?

python - 部分拟合和热启动有什么区别?

python - 使用标签将列传递给输入器的正确方法?

python - 如何在 python 中计算一级 SVM 的 AUC?

machine-learning - 哪一类是阳性以及在为 ML 准备数据时如何确定真正的警报

arrays - 检查目标 : expected dense_3 to have shape (10, 时出错,但得到形状为 (2,) 的数组?即使标签是 one-hot 编码的

java - 快速多次处理大 (GB) 文件 (Java)

python - 使用 pytorch 进行多类句子分类(使用 nn.LSTM)

artificial-intelligence - 请帮助我选择正确的分类器