高容量SVM(机器学习)系统

时间:2010-03-05 01:19:14

标签: java c matlab machine-learning svm

我正在研究一个可能的机器学习项目,该项目预计将使用SVM(支持向量机)和可能的一些ANN进行机器学习的高速计算。

我非常适合在matlab上使用这些,但主要是在小型数据集中,仅用于实验。我想知道这种基于matlab的方法是否会扩展?或者我应该研究其他什么?基于C ++ / gpu的计算? java包装的matlab代码并将其推送到app引擎?

顺便提一下,似乎有很多关于GPU的文献,但关于它们在使用matlab的机器学习应用程序中的用处并不多,&最便宜的CUDA enlabled GPU可以买到吗?它甚至值得麻烦吗?

5 个答案:

答案 0 :(得分:7)

我处理模式识别问题。如果您计划有效地处理SVM / ANN问题并且您真的无法访问计算机集群,请告诉您一些建议:

1)不要使用Matlab。使用Python及其大量数值库代替您的计算的可视化/分析 2)使用C实现更好的关键部分。您可以非常容易地将它们与Python脚本集成 3)如果你主要处理机器学习中典型的非polinomial时间复杂度问题,CUDA / GPU不是解决方案,因此它不会带来很大的加速;点/矩阵产品只是SVM计算的一小部分 - 您仍然需要处理特征提取和列表/对象处理,而是尝试优化算法并设计有效的算法方法。如果您需要并行性(例如,对于ANN),请使用线程或进程 4)使用GCC编译器编译您的C程序 - 它将构建非常快速的可执行代码。为了加速数值计算,您可以尝试GCC优化标志(例如Streaming SIMD Extensions) 5)在Linux OS下的任何现代CPU上运行程序。

为了获得良好的性能,请使用Linux群集。

答案 1 :(得分:5)

libsvmSVM light都有matlab接口。此外,大多数学习任务都是可以并行化的,因此请查看像parfor这样的matlab命令以及并行计算工具箱的其余部分。

答案 2 :(得分:2)

我建议不要使用Matlab进行原型设计之外的任何事情。 当项目变得更加复杂和广泛时,您自己代码的比例将随着matlab和工具箱提供的功能而增加。项目越发达,你从matlab中受益越少,你需要的功能,库,以及 - 更重要的 - 通用语言的实践,流程和工具就越多。

matlab解决方案的扩展是通过与非matlab代码接口实现的,而且我已经看到matlab项目变成了一个不仅仅是用多用途语言编写的胶水调用模块。为每个参与者带来日常痛苦。

如果您对Java感到满意,我建议您将它与一些优秀的数学库一起使用(至少,您可以随时连接MKL)。即使最近的Matlab优化,MKL + JVM也要快得多 - 扩展和可维护性是无法比拟的。

具有处理器特定内在函数的C ++可以提供更好的性能,但代价是开发时间和可维护性。添加CUDA可进一步提高性能,但工作量和具体知识几乎不值得。如果您没有GPU计算的先前经验,当然不会。一旦超越单处理器,将一个或两个CPU添加到系统中比使用GPU计算更加有效。

答案 3 :(得分:0)

目前没有任何内容可以超出限制。 libsvm有一个子集选择工具,用于选择一组数据点进行训练。忘记ANN,它不会概括,没有理论可以帮助选择隐藏节点的数量等。它必须手动优化很多,并且可以陷入局部最小值。仅限SVM

答案 4 :(得分:0)

在这里你可以找到一些半参数近似值,可以非常快速地处理大量数据:

http://www.dabi.temple.edu/budgetedsvm/

https://robedm.github.io/LIBIRWLS/