如何扩大算法开发规模?

数据挖掘 算法
2021-10-10 00:16:46

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

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

一些具体的挑战:

如何减少迭代次数?(尤其是当什么样的算法,更不用说它的细节,如果不尝试不同的版本并检查它们的行为似乎是不容易预见的)

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

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

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

3个回答

首先,如果您的数据有很多变化(在时间、上下文和其他方面的函数)以至于难以应用单一策略来应对它,您可能有兴趣做一个先前的时间/上下文/.. . 数据集的表征。表征数据,即提取有关内容的数量或细节如何根据某些标准变化的信息,通常比简单地以蛮力方式推断算法提供更好的理解(更简洁和精确)。

所以,回答每个问题:

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

这里列出一些分析数据的标准,您可能会发现这些标准很有帮助。

有两件事你可能会觉得有用:

  1. 元学习以加快对正确模型和最佳参数的搜索。元学习包括将机器学习工具应用于为手头的问题找到正确的机器学习工具/参数的问题。这例如本文为一个实际示例;

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

猜猜你可能已经看过这个YouTube 演示和相关的Google Tech Talk,它们与这些论文有关:

以及 GitHub 上针对OpenTLD的这组代码如果您在此处查看 GitHub 上的“阅读我”,您会注意到作者的电子邮件 (Zdenek Kalal)已列出,因此可能值得向他发送一封有关您的问题的电子邮件,甚至邀请他也回复此问题。