我在Octave中整理了一个机器学习程序,如下所示:
我遇到的问题是步骤2,3和4需要几秒钟的时间才能完成整个数据库。但是,步骤1大约需要1秒每个文件,这是过分的。
它花费这么长时间的原因是 - 在大多数情况下 - 因为我使用leasqr
对每个文件执行多个指数拟合。
由于每个类有大约1500个声音文件和3个或更多类,所以它开始加起来。我想扩展到15,000个文件,并且目前的特征提取速度是不可行的。
我必须一遍又一遍地处理特征提取步骤的原因是因为我一直在使用它来调整我的分类器性能。例如。通过改变执行指数拟合的范围。
我的问题如下。我没有从外部运行繁琐流程的经验,但这是否可行?如果是这样,对于这样的情况,什么是好的/标准的做法?如果没有,那么什么是好的做法?
答案 0 :(得分:5)
由于您的流程高度独立(从一个文件中提取特征并不以任何方式取决于其他文件的提取结果),处理此问题的最合理方法是并行化。您可以同时在许多线程/核心/处理器/计算机/集群上运行此过程,假设您可以访问足够的计算能力,从而使整个过程尽可能快。如果您是一名研究人员,您很有可能在大学/研究机构/公司获得一些计算集群。否则,您可以随时购买对此类资源的访问权限,例如在Amazon EC2上(但我相信您可以找到更便宜,更好的群集)。
但似乎更好(在价格和结果方面)会让Octave落后,因为它非常慢并使用执行预处理高效的语言,如c ++。如果这还不够(我非常肯定,它会加速至少一个数量级),那么考虑并行化。
一般来说,Matlab / Octave是分析工具,应该用于研究,而不是用于实际计算。一旦效率,就应该进行“实际编程”了。