【问题标题】:Is it feasible to have the training set < the test set after undersampling the majority class?在对多数类进行欠采样后,让训练集 < 测试集是否可行?
【发布时间】:2020-06-25 07:44:15
【问题描述】:

我有一个包含 1500 条记录的数据集,其中有两个不平衡的类。 0 类是 1300 条记录,而 1 类是 200 条记录,因此比率为 6.5:1。

我用这个数据集构建了一个随机森林进行分类。我从过去的经验中知道,如果我使用整个数据集,召回率非常低,这可能是由于类别不平衡造成的。

所以我决定对 Class 0 进行欠采样。我的步骤如下:

  1. 将数据集随机分成比例为 7:3 的训练集和测试集(因此训练集为 1050,测试集为 450。)

  2. 现在训练集有大约 900 个 0 类的数据 ~100 个 1 类的数据。我对 0 类的大约 900 个数据进行聚类,并对其进行欠采样(按比例)到大约 100 条记录。

所以现在训练集 ~100 Class 0 + ~100 Class 1 = 总共 ~200 条记录,而测试集是 70 Class 0 + 380 Class 1 = 总共 450 条记录。

我的问题来了:

1) 我的步骤有效吗?我先拆分训练/测试,然后对训练集的多数类进行欠采样。

2) 现在我的训练集 (~200)

3) 性能仍然不是很好。精度为 0.34,召回率为 0.72,f1 分数为 0.46。有什么方法可以改善吗?我应该使用简历吗?

非常感谢您的帮助!

【问题讨论】:

    标签: python tensorflow machine-learning data-science imbalanced-data


    【解决方案1】:

    1) 我的步骤有效吗?我先拆分火车/测试然后 对训练集的多数类进行欠采样。

    您应该拆分traintest,以便在两者中保持类平衡。如果在您的整个数据集中比率为6.5:1,则traintest 中的比率应该相同。

    是的,您应该在欠采样之前对其进行拆分(无需对test 案例进行欠采样),只需记住监控多个指标(例如,f1 scorerecallprecision 已经被提及,您应该可以使用那些),因为您正在接受与 test 不同的分布训练。

    2) 现在我的训练集 (~200)

    是的。您也可以在训练数据集上使用oversampling(例如,随机重复minority 类以匹配来自majority 的示例数量)。在这种情况下你也必须先拆分否则你可能会破坏你的 test 集和 training 样本,这更加灾难性。

    3) 性能还不是很好。精度为 0.34,召回率为 0.72,f1 得分为 0.46。有什么方法可以改善吗?我应该使用简历吗?

    这取决于具体问题,我会怎么做:

    • oversampling 而不是 undersampling - 神经网络需要大量数据,你现在没有很多样本
    • 尝试其他非深度学习算法(如果您有很多功能,可以尝试SVMRandomForest 否则也可能是一个不错的选择)
    • 否则微调您的神经网络(特别关注learning rate,如果有时间,请使用 CV 或相关方法)
    • 如果可用于手头的任务,请尝试使用一些预训练的神经网络

    【讨论】:

      猜你喜欢
      • 2020-09-09
      • 2021-05-13
      • 2020-09-06
      • 1970-01-01
      • 2021-01-25
      • 1970-01-01
      • 2021-12-07
      • 2022-11-11
      • 2013-03-27
      相关资源
      最近更新 更多