machine-learning - 二进制分类问题:如何处理严重的数据不平衡?
问题描述
问题
在对原始数据集进行预处理后,我获得了一个干净但严重不平衡的数据集,其中包含 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})
k_neighbour
使用设置为 1的 SMOTE(合成少数过采样技术)对训练数据执行过采样
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 表达)组成,而临床数据集由sample_type
3 种组学数据类型的二进制类标签(以及其他不重要的属性)组成。
目的是通过组合 3 种组学数据类型来获得多组学数据集。为了获得多组学数据,将 3 种组学数据类型与sample_type
基于sampleID
所有 4 个数据集的临床数据(作为类标签)连接起来。最终产品是一个严重不平衡的数据集,其中包含 344 个观察值,其中 341 个带有Primary Tumour
标签的观察值(有癌症,称为1
)和 3 个带有Solid Tissue Normal
标签的观察值(没有癌症,称为0
)
解决方案
这更像是一个统计问题。在我看来,你不应该尝试对这些数据进行任何估计。你不知道是什么让 0 与众不同。只是为了做一个简单的逻辑回归,我建议至少有 30-40 个观察值(最好是更多)。
基于您的数据的最简单估计器是每次都猜测 1。这将导致 99% 的准确率,你不能指望用任何复杂的模型来击败它。
推荐阅读
- windows - 如何在 Windows 上使用命令提示符获取 .exe 文件的内存大小
- python - 在 anaconda 中设置虚拟环境失败
- c - Atmel 工作室无法将 char 数组作为字符串发送
- excel - ¿ 如何从打开的 excel 中复制和粘贴信息?
- asp.net-mvc - IIS 7 - 部署 web 项目后,一些 css 和 js 文件给出 403 错误
- php - 更快地运行 openssl 加密功能
- c# - 带有继承类的 C#/WCF 中的 XML 序列化错误
- android - 仅将 Firebase 分析重新路由到另一个帐户
- java - Java 持久异常
- jquery - $(...).tabOverride 在使用 tabOverride jquery api 时不是一个函数