为不平衡的二进制分类对数据进行过采样的过程

简·萨利

我有大约30%和70%的班级为0(少数族裔)和1级(多数派)。由于我没有很多数据,因此我计划对少数群体进行过度采样,以平衡这些群体以达到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)

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

Desertnaut

我想知道是否应该在将数据分为训练集和测试集之前或之后进行过采样。

当然应该拆分完成,即应仅应用于您的训练集,而不应用于您的验证和测试;还看到我的相关答案在这里

我通常看到它在拆分成在线示例之前就完成了,像这样

正如您所声称的,从显示的代码片段中可以看出,分割之前并没有完成。这取决于train变量的确切位置:如果它是火车测试拆分的乘积,那么实际上应该拆分之后进行过采样

但是,这是否意味着测试数据可能会从训练集中重复采样(因为我们对训练集进行了过度采样)?这意味着测试性能不一定要基于新的,看不见的数据。

恰恰是,这就是为什么在分割以进行训练测试之后而不是在训练之前进行过采样的原因。

(我曾经目睹过一个案例,建模者正在努力理解为什么他获得了〜100%的测试准确度,远高于他的训练水平;结果是他的初始数据集充满了重复项-这里没有类的不平衡,但是这个想法是相似-并且其中一些重复项自然会在拆分后最终出现在他的测试集中,而不会是新的或看不见的数据...)。

我这样做很好

你不应该:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章