深度学习与梯度提升:何时使用什么?

数据挖掘 机器学习 分类 深度学习
2021-09-14 20:33:36

我有一个大数据集的大数据问题(例如 5000 万行和 200 列)。该数据集由大约 100 个数值列和 100 个分类列和一个表示二元类问题的响应列组成。每个分类列的基数小于 50。

我想先验地知道我应该采用深度学习方法还是基于集成树的方法(例如梯度提升、adaboost 或随机森林)。是否有一些探索性数据分析或其他一些技术可以帮助我决定一种方法而不是另一种方法?

4个回答

为什么要限制自己使用这两种方法?因为他们很酷?我总是从一个简单的线性分类器\回归器开始。因此,在这种情况下,线性 SVM 或逻辑回归,最好使用能够利用由于数据大小而导致的稀疏性的算法实现。在该数据集上运行深度学习算法需要很长时间,而且我通常只会尝试对数据中存在一些层次结构(例如图像或文本)的专业问题进行深度学习。对于许多更简单的学习问题来说,这太过分了,需要大量的时间和专业知识来学习,而且 DL 算法的训练速度也很慢。此外,仅仅因为您有 50M 行,并不意味着您需要使用整个数据集才能获得良好的结果。根据数据,使用 100,000 行或几百万行的样本,您可能会得到很好的结果。我会从简单的小样本和线性分类器开始,如果结果不令人满意,我会从那里变得更复杂。至少这样你会得到一个基线。我们经常发现简单的线性模型在大多数任务上胜过更复杂的模型,因此您希望始终从那里开始。

根据@Simon 已经说过的内容:

  1. 深度学习方法在解决视觉、语音和语言建模中的问题特别有用,在这些问题中,特征工程非常棘手并且需要付出很多努力。
  2. 对于您的应用程序,情况似乎并非如此,因为您具有明确定义的功能并且只需要功能交互等。
  3. 鉴于深度学习模型目前需要大量计算资源和科学家时间来编写代码,我建议选择非深度学习方法。

对于您的问题,努力与收益的权衡似乎不利于深度学习。DL 将是一个矫枉过正

从我的角度来看,对于 500 万个实例,您需要大量树才能获得良好的泛化界限(外行术语中的良好模型)。如果这不是问题,那就去做吧,即使是确切的答案也取决于你问题的性质。GBT 是一种很好的方法,尤其是当您具有分类、数字等混合特征类型时。此外,与神经网络相比,它需要调整的超参数数量较少。因此,拥有最佳设置模型会更快。另一件事是并行训练的替代方案。您可以使用良好的 CPU 同时训练多棵树。如果您对结果不满意,请选择神经网络,因为这意味着您的模型应该更广泛,并且应该通过您的数据学习更高阶的信息。这是 NN 与其他学习算法相比的原因。

除了其他答案(评论中有一些很好的链接)之外,它还取决于问题是什么或您想回答什么样的问题。由于我只能根据自己的经验提出建议,那么在分类任务的情况下,可能的方法可能会根据数据集中的类平衡受到严重限制。

一旦你的类别不平衡超过 1:10,那么大多数分类方法就会停止工作。您将得到基于随机森林和神经网络的方法(还没有尝试过)。我使用 1:500 到 1:1000 范围内的类平衡,发现下采样或上采样都不起作用。幸运的是,我的数据集“仅”是 200 个变量的 600 万个观测值,我能够在合理的时间内在整个集合上运行增强树。

所以直接回答你的问题:

  • 你应该想出一堆你想回答的问题,在分类的情况下,然后检查目标变量的类平衡。

  • 您应该检查所有数据中缺失值的分布(不是数学意义上的)并记录您的发现。一些 ML 方法可以处理缺失值,而其他方法则不然,您需要研究数据插补(它有自己的一套规则、指导方针和问题)。