具有不平衡、异质负背景的一类歧视性分类?

数据挖掘 机器学习 数据挖掘 Python 分类
2021-09-23 00:57:57

我正在努力改进现有的监督分类器,用于将 {蛋白质} 序列分类为属于特定类别(神经肽激素前体)或不属于。

在大约 1300 万个蛋白质序列(“未知/注释不佳的背景”)的背景下,大约有 1,150 个已知的“阳性”,或大约 100,000 个经过审查的相关蛋白质,带有各种属性的注释(但很少有明确注释的“消极”的方式)。

我之前的实现将此视为一个二元分类问题:正集 = 标记为神经肽的蛋白质。负集:从长度分布大致相似的剩余蛋白质中随机抽取 1,300 个样本(总计)。

那行得通,但我想大大提高机器的辨别能力(目前,在多个随机采样的负集上,通过 CV 测量的准确度、AUC、F1 约为 83-86%)。

我的想法是:1)使这个问题成为一个多类问题,选择 2-3 种不同类别的蛋白质,它们的属性/功能类别肯定是负面的,以及(也许)另一个随机抽样的集合。(这里的优先级是在特征/特征上与正集相似但仍具有定义特征的负集)。2)一类学习 - 会很好,但据我了解,它仅用于异常检测,并且性能比歧视性方法差。

*) 我听说过 PU 学习,听起来很不错,但我是编程 N00b,我不知道它有任何现有的实现。(在 Python/sci-kit 中学习)。

那么,方法 1 在理论 POV 中有意义吗?有没有制作多个负集的最佳方法?(我也可以简单地使用大量 [50K] 的“阴性”蛋白质,但它们彼此之间都非常不同,所以我不知道分类器将它们作为一个大的、不平衡的混合物处理得如何)。谢谢!

3个回答

一节课学习

我不会太快放弃一类分类方法(选项 2)——关键是用一类模型对正(少数)类进行建模。

有研究表明,一类分类优于其他方法,例如对蛋白质分类任务中常见的高度不平衡数据进行抽样。

我找不到我回忆的研究,但我确实找到了一些其他的比较,显示使用一类分类器(通常对少数类进行建模)与通常使用从大集合中采样的“负数”的二元分类相比获得了更好或更好的性能不知道是阳性的蛋白质。

此外,这种方法还具有大大改善运行时间的优势——因为您只需要在较小的正集上训练分类器。几篇论文:

“使用一类分类方法和整合不同的生物学数据预测蛋白质-蛋白质相互作用”

“蛋白质序列和结构的一类分类方法”

至少我会尝试一些一类方法,并将使用验证的性能与您的二元/多类分类方法进行比较。其中许多也有开源实现,因此尝试它们的成本应该不会太高,例如 LibSVM 具有一类 SVM 实现。此外,它可能被证明在与二元分类器的集成中使用是有价值的,因为它们的预测可能存在更多分歧。

更高级别的表示嵌入/聚类

根据您对 (1) 的想法和建议 PCA 的另一篇文章,聚类、稀疏编码甚至主题建模等方法 - 将每个蛋白质视为文档字符串,将不同的蛋白质家族视为不同的主题 - 可以产生表示这可能使蛋白质分类变得简单。

即,您可以识别蛋白质属于哪个组/簇或对簇成员/嵌入表示进行分类。

例如,稀疏编码之类的嵌入方法也可以产生揭示蛋白质属于哪个簇的表示——因此某些特征集仅对同一簇中的蛋白质有效(非零)——这可以使它们的分类更加容易。

此外,对于大多数方法,类标签或已知的集群成员资格可以合并到嵌入过程中。

合奏

多个分类器的集成往往效果最好 - 特别是当分类器非常多样化并且可以单独实现相当的性能时。

对于这个问题,至少有两种使用集成的方法。

  1. 您可以通过对多个不同大小相同的负集进行采样并在每个负集上训练分类器来构建二元分类器的集合。
  2. 您可以从不同的方法构建一个集成,例如具有不同负样本的二元分类器,结合一类分类方法,结合在嵌入数据上训练的分类模型。

一般来说,我解决这个问题的方法是利用主成分分析或普通最小二乘法等统计分析来帮助确定这些蛋白质序列中的哪些属性最适合将蛋白质分类为神经肽激素前体。

为此,您必须将蛋白质序列转换为数字数据,但我相信在这方面已经使用氨基酸 PCA 中的公式进行了一些工作。

看这两个链接:

一旦完成这项工作,我将尝试使用整个数据集和强化学习算法(如朴素贝叶斯)进行分类,同时将数据精简为 PCA 认为重要的数据。

我尝试使用贝叶斯的原因是它已被证明是确定垃圾邮件与常规电子邮件的最佳方法之一,后者具有类似的倾斜数据集。

说了这么多...

减少负面分类的数量或类型可能会使您的结果以某种方式偏斜几分,但我认为您不会看到长期有效性发生实质性变化,直到您完成确定如何最好地消除训练数据的模糊性。这要么需要现场专家,要么需要统计分析。

我可能完全不在基地。我有兴趣看到其他答案,但那是我的 2 美分。

您可以采用三种方法:APP、OAA、AAO。APP 是基于所有可能的类对的对象之间的区分。OAA 是对所有类(剩余类)的使用,而 AAO 是一次全部使用,例如同时对多个类使用 F 检验(或 Hotelling 对 MVN 的检验)。APP 和 AAO 实际上是多个二进制分类运行,但有两个以上的原始类。对于所使用的各种分类器,这些方法中的每一种都会产生不同的结果。

随机抽样是一种很好的技术。您也可以尝试使用 k-means 将所有对象聚集到中心,然后将中心用作新对象。无论哪种方式,线性和非线性降维方法都可能有助于摆脱大样本量。