7

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

我很喜欢用这些在 matlab 上工作,但主要是在小数据集中,只是为了实验。我想知道这种基于 matlab 的方法是否会扩展?还是我应该研究其他东西?基于 C++ / gpu 的计算?java包装matlab代码并将其推送到应用程序引擎?

顺便说一句,似乎有很多关于 GPU 的文献,但没有太多关于它们在使用 matlab 的机器学习应用程序中的用处,以及最便宜的支持 CUDA 的 GPU 钱可以买到吗?它甚至值得麻烦吗?

4

5 回答 5

7

我研究模式识别问题。如果您计划有效地解决 SVM/ANN 问题并且您真的无法访问计算机集群,请让我给您一些建议:

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

要获得真正好的性能,请使用 Linux 集群。

于 2010-03-12T14:20:05.720 回答
5

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

于 2010-03-05T03:19:15.827 回答
2

我建议不要将 Matlab 用于原型设计之外的任何事情。当项目变得更加复杂和广泛时,与 matlab 和工具箱提供的功能相比,您自己的代码比例将会增加。项目开发得越多,您从 matlab 中受益越少,您需要的功能、库以及(更重要的是)通用语言的实践、流程和工具就越多。

matlab 解决方案的缩放是通过与非 matlab 代码交互来实现的,我已经看到 matlab 项目变成了一个用多用途语言编写的胶水调用模块。给所有相关人员造成日常痛苦。

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

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

于 2010-03-14T19:39:38.860 回答
0

到目前为止,没有任何东西可以扩展超出限制。libsvm 有一个子集选择工具,可以选择一组数据点进行训练。忘记人工神经网络,它不会泛化,也没有理论可以帮助选择隐藏节点的数量等。它必须手动优化很多,并且可能会陷入局部最小值。仅使用 SVM

于 2011-03-15T10:54:34.170 回答
0

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

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

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

于 2016-11-11T08:40:28.303 回答