不平衡、半监督、稀疏问题的一般策略

数据挖掘 机器学习 预测建模 半监督学习
2021-10-02 03:26:23

我正在寻找一些关于从哪里开始解决这个问题的一般建议。有 350 个稀疏(低正整数)特征。我有 2000 个阳性、1000 个阴性和无限的未标记数据,其中未标记数据中估计的真阳性率约为 1%(但这并不确定)。目标是预测示例为正的概率。

如果您有大约 40 小时的时间来获得最佳模型,您将如何解决这个问题?

如果你有更多的时间呢?

2个回答

这是一个二元半监督分类问题。首先,为监督案例建立基线。然后尝试未标记的数据是否有帮助

监督

  1. 根据您的标记数据:创建训练、验证和测试集。直到最后都不要触摸测试集。
  2. 尝试一些简单的东西,例如具有 350 个输入节点和 1 个输出节点的多层感知器 (MLP)(给出“真”的概率)。
  3. 尝试更多的东西(例如https://github.com/MartinThoma/algorithms/blob/master/ML/mnist/many-classifiers/python.py#L92)。
  4. 尝试在集成中组合分类器(参见示例)。
  5. 一个(朴素的)贝叶斯分类器可能值得研究。

半监督

  • 您可以在未标记数据上训练具有瓶颈的自动编码器。然后删除瓶颈后的所有内容。将此网络用作预处理步骤。这个想法是这个网络找到了相关数据的更有意义的抽象。然而,与 PCA 类似,投影误差非常低,但仍然破坏了区分类别的可能性。
  • SVM 也可用于半监督设置。
  • 您可以尝试在未标记数据 + 标记数据中查找集群。然后,您可以获得每个集群的“真”的先验概率(忽略未标记的数据)。您可以在集群中的数据上训练非常小的模型(过度拟合!)。

通常,您可以解释特征。这可能有助于开发新功能。

考虑到您的时间预算和与类别不平衡相关的潜在挑战,我会丢弃未标记的数据并在标记数据上使用监督学习。尝试一个简单的分类器,例如逻辑回归或随机森林或 xgBoost,并使用交叉验证来查看它们的执行情况。提前搁置一个保留的测试数据,直到最后不要触摸它。对其余数据使用交叉验证来尝试不同的分类器和不同的方法。

你必须处理一个严重的类不平衡问题。我的怀疑是,您可能需要将大部分时间用于处理班级不平衡问题。1% 的真阳性率对应于 100 倍的类不平衡,这会给许多分类器带来严重的问题,并且可能会让人头疼。

此外,真正的基础分布与训练集中的分布不匹配:野外的真阳性率为 1%,但 67% 的训练集是阳性的。您也需要对此进行调整。

有很多方法可以处理类不平衡,并调整训练集与野外不平衡之间的差异。我建议您从设置类权重开始:您需要将负数的权重提高 198 倍(因此,训练集中负数的错误成本是正数集中正数错误的 198 倍),因为在野外,您期望看到的分布是 2000 个正数和 198000 个负数,而不是 2000 个正数和 1000 个负数。

挑战在于,一些分类器很难很好地处理这种级别的类不平衡。例如,众所周知,SVM 有时会在存在这种类别不平衡的情况下严重失败。他们最终可能会默认始终预测“负数”,因为这样的错误率只有 1%。相比之下,逻辑回归往往表现更好,并提供了一种调整类别不平衡的简单方法。

对类不平衡进行一些搜索;你会发现很多关于多种策略的文章,你可以使用它来处理它。

如果类不平衡结果不是问题,并且您在第一次尝试时得到了一个不错的分类器,并且您有更多时间尝试改进结果,那么我接下来要花时间看看您是否设计更好/更多的特性,给定关于这些实例来自哪里的领域知识。