2

我在 Octave 中整理了一个机器学习例程,如下所示:

  1. 从声音文件中提取特征
  2. 特征被缩放和标准化
  3. 训练 SVM 分类器
  4. 进行分类

我遇到的问题是步骤 2,3 和 4 需要几秒钟的时间才能完成整个数据库。但是,第 1 步每个文件大约需要 1 秒,这太长了。

花费这么长时间的原因是 - 在大多数情况下 - 因为我正在使用每个文件执行多个指数拟合leasqr

由于我每个班级大约有 1500 个声音文件和 3 个或更多班级,所以它开始加起来。我想扩展到 15,000 个文件,并且以当前不可行的特征提取速度。

我必须一遍又一遍地处理特征提取步骤的原因是因为我一直在使用它来调整我的分类器性能。例如,通过改变执行指数拟合的范围。

我的问题如下。我没有在外部运行繁琐流程的经验,但这会是一个可行的解决方案吗?如果是这样,对于这种情况,什么是好的/标准做法?如果没有,什么是好的做法?

4

1 回答 1

5

由于您的过程是高度独立的(从一个文件中提取特征不以任何方式依赖于其他文件的提取结果),处理此问题的最合乎逻辑的方法是并行化。您可以同时在多个线程/内核/处理器/计算机/集群上运行此过程,假设您有足够的计算能力,使整个过程尽可能快。如果您是一名研究人员,您很有可能可以访问您的大学/研究机构/公司中的一些计算集群。否则,您总是可以购买对此类资源的访问权限,例如在 Amazon EC2 上(但我相信您可以找到更便宜、更好的集群)。

但似乎更好的(从价格和结果的意义上来说)将 Octave 抛在后面,因为它非常慢并且使用高效的语言(如 c++)执行您的预处理。如果这还不够(我很确定,它至少会加快速度),然后考虑并行化。

一般来说,Matlab/Octave 是分析工具,应该用于研究,而不是用于实际计算。一旦考虑到效率,就该进行“实际编程”了。

于 2013-09-02T07:27:37.630 回答