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


30

我有一个大数据集的大数据问题(例如,有5000万行和200列)。该数据集由大约100个数字列和100个分类列以及代表二进制类问题的响应列组成。每个分类列的基数小于50。

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


2
我认为,除非您对数据属性有一定的直觉,否则最终会同时探索这两个选项(可能只有500,000行)并进行交叉验证。但是也许有可视化或其他分析可以帮助您获得直觉。
尼尔·斯莱特

1
实际上,本周我一直在计划对我自己的真实数据研究进行大模型比较。我会整理一下结果,然后将其发布到此处。此外,在至少一个CS的学生已经研究了这个问题:academia.edu/3526056/...
shadowtalker

1
@NeilSlater我想看到一个答案,以解决直觉可能/应该/应该是什么
shadowtalker 2014年

1
我仍然没有足够的声誉来对您的原始问题进行简短评论,但这并不是真正的答案。无论如何,我想说的是,我认为本文与该问题非常相关:M。Fernández-Delgado,E。Cernadas,Bar。S.和Amorim,D。(2014)。我们是否需要数百个分类器来解决现实世界中的分类问题?机器学习研究杂志,第15期,3133–3181。取自dl.acm.org/citation.cfm?id=2697065
何塞·玛丽亚·马特奥斯

是否有一些探索性的数据分析或其他一些技术可以帮助我确定一种方法而不是另一种方法?在一般情况下,“无免费午餐定理”证明了这一点。但是有些启发式方法可能会指导您朝正确的方向发展,例如scikit-learn.org/stable/tutorial/machine_learning_map/…–
Simon,

Answers:


32

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


4
+1,以简单的模型和子采样开始
Matt

我同意使用svm来处理稀疏数据,但是您不认为svm会花费大量时间来训练如此庞大的数据集!
blitu12345

不,特别是如果它是稀疏的并且使用线性核的话。但是它们可能存在大量行的问题。无论哪种方式,这都将比DL模型快得多。但请注意,我还建议进行逻辑回归。
西蒙(Simon)

我的主要观点是从一个简单的线性模型开始,甚至不使用完整的数据集,因为您不太可能需要整个数据集来获得良好的性能。我怀疑使用10万行和几百万行之间的准确性有很大差异。
西蒙(Simon)

+1尝试对数据中存在某些层次结构的专家问题进行深度学习
eric2323223,

4

除了其他答案(注释中有一些很好的链接)之外,还取决于问题是什么或您想回答哪种问题。由于我只能根据自己的经验提出建议,因此在进行分类任务时,可能会基于数据集中的类平衡严重限制可能的方法。

一旦您遇到了大于1:10左右的班级失衡,那么大多数分类方法就会停止工作。您将获得基于随机森林和神经网络(尚未尝试)的方法。我使用的类平衡在1:500到1:1000的范围内工作,但发现下采样或上采样均无效。幸运的是,我的数据集只有200万个变量的600万观测值,我能够在合理的时间内对整个集合运行增强树。

因此,直接回答您的问题:

  • 您应该提出一系列问题,如果要分类,请检查目标变量的类平衡。

  • 您应该检查所有数据中缺失值的分布(不是数学意义),并记录发现的内容。一些ML方法可以使用缺少值的方法,而其他方法则可以,但是您需要研究数据插补(它具有自己的一套规则,准则和问题)。


1
尝试使用sklearn中的SGD分类器,将class_weight =“ balanced”
迭戈

4

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


4

在@Simon已经说过的话:

  1. 深度学习方法对于解决视觉,语音和语言建模中的问题特别有用,因为在这些过程中要素工程比较棘手,需要大量的工作。
  2. 对于您的应用程序,情况似乎并非如此,因为您具有定义明确的功能,仅需要功能交互等。
  3. 考虑到深度学习模型当前需要大量的计算资源和科学家时间来进行编码,我建议选择一种非深度学习方法。

对于您的问题,努力与收益之间的权衡似乎并不适合深度学习。DL可能会过大


1

当您拥有如此庞大的数据集时,您可以使用任何统计和机器学习建模技术,强烈建议您这样做。正如其他人所建议的那样,我也建议从数据中抽取几百万个随机样本进行处理。由于这是一个分类问题,因此我将首先采用简单的分类技术,然后再使用更复杂的分类技术。逻辑回归非常好。

我想补充一点,生成模型也必须试用。朴素贝叶斯分类器是最简单的概率分类器之一,它在许多任务上都优于许多复杂的方法,例如支持向量机。您可以查看NB的简单实现以及用于比较NB与逻辑回归的this链接。

可以将朴素贝叶斯(NB)分类器构建为基线模型,然后再使用任何机器学习技术,例如支持向量机(SVM)或多层感知器(MLP)。这里需要权衡的是,NB在计算上比MLP便宜,因此需要MLP更好的性能。

来到您的确切查询:深度学习和梯度树增强是非常强大的技术,可以为数据中的任何类型的关系建模。但是,如果您的情况是简单的逻辑回归或NB可以提供所需的准确性,该怎么办。因此,最好先尝试简单的技术并获得基准性能。然后就可以使用复杂的模型并与基线进行比较。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.