【发布时间】:2021-08-18 07:56:40
【问题描述】:
问题
在对原始数据集进行预处理后,我获得了一个干净但严重不平衡的数据集,其中包含 341 个标签为 1 的观测值和 3 个标签为 0 的观测值(有关数据集的更多详细信息在底部)。
Dataset shape: (344, 1500)
Dataset class label distribution: Counter({1: 341, 0: 3})
我可以做些什么来继续使用这个数据集进行分类?
我尝试过的:
- 将数据集拆分为具有 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})
- 使用 SMOTE(合成少数过采样技术)对训练数据执行过采样,
k_neighbour设置为 1
After SMOTE:
Train data shape: (476, 1500)
Train data class label distribution: Counter({1: 238, 0: 238})
我打算使用过采样的训练数据训练一个分类器,并使用测试数据得到分类结果。
但这有意义吗?在我看来这是没有意义的,因为
-
过采样的训练数据可能会过拟合模型,因为过采样的训练数据现在有许多带有类标签
0的观察结果,这些观察结果仅基于 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