特征提取步骤耗时过长

我在Octave中编写了一个机器学习程序,步骤如下:

  1. 从音频文件中提取特征
  2. 对特征进行缩放和归一化
  3. 训练SVM分类器
  4. 执行分类

我遇到的问题是步骤2、3和4在整个数据库上完成只需几秒钟的时间。然而,步骤1却需要每处理一个文件大约1秒钟,这实在是太长了。

之所以耗时如此之长,主要是因为我对每个文件进行了多次指数拟合,使用了leasqr函数。

由于每个类别大约有1500个音频文件,且有3个或更多类别,时间很快就累积起来了。我希望扩展到15000个文件,但以目前的特征提取速度,这将不可行。

我不得不反复处理特征提取步骤,因为我一直在用它来调整分类器的性能。例如,通过改变进行指数拟合的范围来调整。

我的问题是这样的。我没有经验在外部运行繁重的进程,但这是否是一个可行的解决方案?如果是,那么在这种情况下,什么是好的/标准的做法?如果不是,那么什么是好的做法?


回答:

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

但似乎,更好的(在价格和结果方面)做法是放弃Octave,因为它速度极慢,并使用像c++这样的高效语言来进行预处理。如果这还不够(我相当确定,这将至少提高一个数量级的速度),那么再考虑并行化。

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

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注