特征提取步骤耗时过长

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

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

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

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

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

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

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


回答:

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

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

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

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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