支持向量机(SVM)是否适合大规模数据?

之前学习支持向量机的时候老师就说支持向量机不适用于大规模数据,然后在一篇统计人写的论文中看到说支持向量机经常被用到massive dataset上。我…
关注者
1,122
被浏览
446,903
登录后你可以
不限量看优质回答私信答主深度交流精彩内容一键收藏

关于什么是大规模机器学习,可以参考[1, 2, 3]的讨论。显然,大小是个相对的概念,在机器学习的语境下也不例外,什么是大规模,这很大程度上取决于你所面对的应用以及可用的计算资源。在互联网应用成为机器学习主要应用领域之一的今天,能不能处理Google或者淘宝这样重量级的网站所生成的数据,成为互联网从业人员心目中大规模的标尺。

从技术角度看,统计学习算法所能处理的数据规模有几个分水岭:

1)算法是否依赖于对训练集的随机访问。依赖于训练集随机访问的算法需要将训练集全部加载进内存,所能处理的数据量受内存大小的限制。

2)算法是否能有效地利用分布式(或并行的)计算资源。单台计算机(或单处理器)的处理能力毕竟是有限的。如果可用的计算资源增长100倍,算法能处理的数据量的增长远小于100倍,则算法的适用范围也会有很大的限制。

以上主要是围绕训练集的规模在讨论,实际上还会有更多需要考虑的问题,比如数据的维数、分类类别的数目、检测时的效率等等问题,可以参考[2]及其中提到的相关文献。如[3]中所说,(传统的?)统计学习的核心问题是样本不足时如何得到泛化能力很强的模型,但对于大规模学习来说,障碍往往在于算法的计算能力不足,不是数据不够,所以也可以说传统的统计学习方法都不适合大规模数据处理(不只是SVM)。

因为互联网应用的推动,最近几年这个领域新结果非常多。总体来说,对于基于支持向量机的大规模线性分类问题,目前已经能比较好地解决。[4]对现有结果做了比较好的总结,[2]则对需要进一步解决的问题有很好的概述。

对于非线性分类问题,基于Dual Decomposition(或者SMO)方法的SVM-Light和LibSVM目前仍被广泛使用,他们最坏情况下复杂度是O(训练样本数的平方),并不适合在大规模数据集上做训练。Pegasos[5]的复杂度同训练样本数呈线性关系,但实验中效率并不高于SMO方法。盛佳提到的PSVM[6]利用分布式计算资源降低训练耗时。不过在我接触过的应用场景里(比如对象检测),非线性SVM的最大问题不是训练时代价问题,而是检测时代价太高,在实际应用中基本上已经退出竞争。当然,相关的研究并没有终止——毕竟不同的应用场景会有不同的需求。

对于未来的发展,还是多看看[2]吧。

[1] hunch.net/?

[2] hunch.net/?

[3] yann.lecun.com/exdb/pub

[4] cseweb.ucsd.edu/~akmeno

[5] portal.acm.org/citation

[6] code.google.com/p/psvm/