如何扩展算法开发?


18

在进行探索性数据分析和开发算法的过程中,我发现大部分时间都花在可视化,编写代码,在小型数据集上运行,重复的周期中。我拥有的数据往往是计算机视觉/传感器融合类型的东西,而算法则是视觉密集型的(例如,对象检测和跟踪等),而现有算法在这种情况下不起作用。我发现这需要很多次迭代(例如,拨入算法的类型或调整算法中的参数或获得正确的可视化效果),而且即使在较小的数据集上,运行时间也很长,因此总共需要一段时间。

如何加速算法开发本身并使其更具可扩展性?

一些特定的挑战:

如何减少迭代次数?(尤其是在不尝试不同版本并检查其行为的情况下,似乎很难预见哪种算法,更不用说算法的细节了)

在开发过程中如何在更大的数据集上运行?(通常是从小型数据集到大型数据集,是当看到一堆新行为和新问题时)

如何更快地调整算法参数?

如何将机器学习类型工具应用于算法开发本身?(例如,不要手工编写算法,而是编写一些简单的构建基块并以从问题中学习的方式将它们组合起来,等等)

Answers:


7

首先,如果您的数据具有多种变化(根据时间,上下文和其他因素而变化),以至于难以采用单一策略来应对它,那么您可能会对先验的时间/语境/感兴趣。数据集的表征。与简单地以蛮力方式推断算法相比,对数据进行特征化(即提取有关内容的体积或特定程度如何根据某些标准变化的信息)通常可以更好地理解(更加简洁和精确)。

因此,回答每个问题:

  1. 表征绝对是一种减少迭代次数,同时尝试为特定数据选择适当算法的方法;
  2. 如果您有一组离散的准则来改变数据,那么扩展解决方案将变得更加容易,因为如果应用了更简单/特定的解决方案,您将知道您将获得/失去哪些信息;
  3. 表征后,您还应该更容易选择参数,因为您会知道要处理哪种特定数据
  4. 最后,您可以使用数据挖掘/机器学习算法来支持这种表征。这包括使用:
    • 聚类算法,以减少数据的维数;
    • 分类算法,可以帮助根据时间/上下文/ ...功能确定数据的特定属性;
    • 关联规则,以从数据集中预测特定知识,同时还可以改善/细化用于以后分析的数据;
    • 以及其他可能的策略和分析。

这里是一些指标分析上,分析数据,这可能对您有用的列表。


5

您可能会发现有用的两件事:

  1. 元学习可加快对正确模型和最佳参数的搜索。元学习包括将机器学习工具应用于解决问题的方法,以找到适合当前问题的正确机器学习工具/参数。例如,本文是一个实际的例子。

  2. gpucomputing加快大型数据集上算法的速度。例如,OpenCV可以使用GPU,它们在处理图像/视频方面非常有效,并且相对于CPU可以提高10到100倍的速度。由于您的计算机很可能具有可以使用gpucomputing的GPU,因此您可以使用它获得很多时间。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.