【问题标题】:Binary Classification Problem: How to Proceed With Severe Data Imbalance?二进制分类问题:如何处理严重的数据不平衡?
【发布时间】:2021-08-18 07:56:40
【问题描述】:

问题

在对原始数据集进行预处理后,我获得了一个干净但严重不平衡的数据集,其中包含 341 个标签为 1 的观测值和 3 个标签为 0 的观测值(有关数据集的更多详细信息在底部)。

    Dataset shape:  (344, 1500)
    Dataset class label distribution:  Counter({1: 341, 0: 3})

我可以做些什么来继续使用这个数据集进行分类?

我尝试过的:

  1. 将数据集拆分为具有 70:30 比例的训练测试集,并在类标签上分层
    Train data shape:  (240, 1500) 
    Train data class label distribution: Counter({1: 238, 0: 2})

    Test data shape:  (104, 1500) 
    Test data class label distribution: Counter({1: 103, 0: 1})
  1. 使用 SMOTE(合成少数过采样技术)对训练数据执行过采样,k_neighbour 设置为 1
    After SMOTE:

    Train data shape:  (476, 1500)
    Train data class label distribution: Counter({1: 238, 0: 238})

我打算使用过采样的训练数据训练一个分类器,并使用测试数据得到分类结果。

但这有意义吗?在我看来这是没有意义的,因为

  1. 过采样的训练数据可能会过拟合模型,因为过采样的训练数据现在有许多带有类标签 0 的观察结果,这些观察结果仅基于 2 个观察结果进行过采样。
  2. 测试数据的少数类标签在 104 个样本中只有 1 个观察值。因此,仅通过对多数类标签进行预测,分类器将具有很高的准确性(最初我也计划对测试数据执行 SMOTE,但我从某处得知过采样技术仅用于训练数据)。

我真的被困在这里,找不到任何与此问题相关的信息。


获得的多组学数据集的简要总结:

原始肺癌 (LUSC) 数据集来自http://acgt.cs.tau.ac.il/multi_omic_benchmark/download.html。它由 3 种组学数据类型和 1 个临床数据集组成。 3 种组学数据类型由 3 种不同的组学表达(基因表达、DNA 甲基化和 miRNA 表达)组成,而临床数据集则由 3 种组学数据类型的二进制类标签sample_type(以及其他不重要的属性)组成。

目的是通过组合 3 种组学数据类型来获得多组学数据集。 为了获得多组学数据,在所有 4 个数据集中,基于sampleID 将 3 种组学数据类型与临床数据(以sample_type 作为类标签)连接。最终产品是一个严重不平衡的数据集,由 344 个观察值组成,其中 341 个观察值带有 Primary Tumour 标签(有癌症,称为1)和 3 个观察结果带有 Solid Tissue Normal 标签(无癌症,称为0

【问题讨论】:

  • “如何处理不平衡的数据”这个问题太宽泛了。它也与 Python 没有任何关系。考虑多研究一下这个话题,有多种方法可以解决这个问题,但没有一种通用的方法。
  • 我投票结束这个问题,因为它与 help center 中定义的编程无关,而是关于 ML 理论和/或方法 - 请参阅 stackoverflow.com/tags/machine-learning/info

标签: machine-learning imbalanced-data


【解决方案1】:

这更像是一个统计问题。在我看来,你不应该尝试对这些数据进行任何估计。你不知道是什么让 0 与众不同。只是为了做一个简单的逻辑回归,我建议至少有 30-40 个观察值(最好是更多)。

基于您的数据的最简单估算器是每次都猜测 1。这将导致 99% 的准确率,你不能指望用任何复杂的模型来击败它。

【讨论】:

  • 准确度在这里作为一个指标没有帮助。根据目标的不同,最好坚持使用精度、召回率、f1 或 auc 来比较不同的模型
  • 总的来说,我同意。但是在这个例子中,没有 0 个预测。因此precision=accuracy 和recall 为1,额外的指标不会添加任何新信息
  • 你是对的,抱歉没有正确阅读帖子
猜你喜欢
  • 1970-01-01
  • 2019-07-13
  • 2020-04-12
  • 2018-09-13
  • 2020-06-27
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 2017-04-19
相关资源
最近更新 更多