首页 > 解决方案 > 二进制分类问题:如何处理严重的数据不平衡?

问题描述

问题

在对原始数据集进行预处理后,我获得了一个干净但严重不平衡的数据集,其中包含 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. k_neighbour使用设置为 1的 SMOTE(合成少数过采样技术)对训练数据执行过采样
    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 表达)组成,而临床数据集由sample_type3 种组学数据类型的二进制类标签(以及其他不重要的属性)组成。

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

标签: machine-learningimbalanced-data

解决方案


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

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


推荐阅读