使用(大+稀疏)二进制输入数据进行二进制分类的快速 ML 算法

数据挖掘 机器学习 分类 表现
2022-03-09 22:59:07

很抱歉,这个范围非常广泛,但作为一名非 ML 科学家,几乎不可能跟上最近的发展(尤其是在深度学习等方面)。因此,我正在寻求有关如何处理此特定用例的指导:

目标是从约 50,000 个二进制输入变量中预测二进制输出(输入数据相当稀疏,平均大约 1,000 个 1)。训练数据集包括数千个(相当平衡的)标记样本。我已经有一个非 ML 解决方案来解决这个问题,但它的计算成本很高。因此,我的问题:

  1. 哪些 ML 算法在这种规模的二进制数据上运行良好(即在小型 HPC 集群上训练相当快)。
  2. 它们是否允许提取有关输入的信息(即各个二进制变量的负载量)。
  3. 拥有二进制数据的性能优势有多大?与使用 50k 二进制输入变量相反,我可以运行 PCA 并使用前几百台 PC(大约需要 500 台才能恢复 90% 的方差)进行训练/预测。有什么优点/注意事项?

输入变量的顺序并不是真正的“随机”,但它们的重要性可能是。因此,我认为 CNN 不是最好的主意,但非卷积神经网络在这种规模上是否可行?此外,通常只有少数输入变量主要决定输出,如果这对模型选择有任何影响的话。

我过去曾与 ML 合作过,但这是几年前的事了,我的理论知识还不够生疏。此外,从那时起,神经网络架构/框架等的多样性已经爆炸式增长,因此我想在盲目尝试一切之前征求一些意见。

1个回答

我在评论中提到提升可能是一种选择。但是,经过重新考虑,我想(据我从您的数据描述中可以看出)您最好从正则化(套索、弹性网、脊)的逻辑回归开始。为什么?

  • 你想学习“快”(没有太多的调整等)
  • 您的数据往往是高维度的
  • 你不知道哪些特征是好的预测器

这一起让我想到,1)尝试套索将是开始的事情。如果失败,2) 继续使用山脊。

Lasso 可以将特征的影响缩小到零(在高维数据中很好)。然而,这可能会导致发生“过多”正则化的情况。所以你可以试试 ridge,在这种情况下,特征会“缩小”,但永远不会变为零。

我不知道你是使用 R 还是 Python,但 lasso/ridge 两者都可用。确保通过交叉验证找到正确的 lambda(正则化调整参数)(这不会太贵)。

这是一个很好的 R 教程:https ://web.stanford.edu/~hastie/glmnet/glmnet_alpha.html

对于 Python,也有很好的教程。

一些背景可以在“统计学习简介”中找到,其中 R 和 Python 代码是在线的。http://www-bcf.usc.edu/~gareth/ISL/