3

我正在尝试开发一个能够理解两线图相似(它们具有相似方向或相似值)的脚本。算法:理解两线图是否相似

例如假设我有两个数组:

array1 = [0,1,2,3,4,5,6,7,8,9,10]; 

array2 = [2,3,4,5,6,7,8,8,10,11,12]; 

正如你可以看到他们增长和他们的价值观是非常相似的。

目前,我已找到一个完美的工作解决方案,使用DTW算法。 问题是,DTW的“培训部分”非常快(我只需要存储很多折线图),但它有一个沉重的预测部分,因为它将最后一个折线图与所有其他折线图记忆。

所以我的问题是:是否有可能移动计算复杂的时间在训练部分,以便有更快的预测? 例如创建一个搜索树或类似的东西? 并且如果可以相应地确定哪些特定值可以聚集信息?

您有任何建议或有用的链接?

+0

您的Wikipedia链接包含一些链接,用于计算DTW的快速技术。这些方法适合你吗? – algrid

回答

1

通常可以将对象从您的域映射到线性空间。例如,你可以看到这是如何工作的自然语言文字嵌入(word2vec tutorial,跳转到“可视化嵌入学习”)。在此设置中,对象之间的相似性由线性空间中的距离来定义,该距离计算速度非常快。

在你的情况下,映射的复杂程度很大程度上取决于你的数据:图表的多样性以及你希望捕获什么样的相似性。

在你的例子中有两个向量,可以计算一个单一的值:regression line的斜率。这可能会起作用,你的图表本质上是“有点线性”的。如果您想要捕捉正弦曲线模式,则可以尝试通过减去第一个值来对时间序列进行归一化。再次,在您的特定示例中,它将显示出完美的配合。底线:映射的复杂性由数据的复杂性决定。

1

如果它们始终具有相同的长度,皮尔逊相关应该更合适,而且要快得多。

如果您将您的矢量标准化,Pearson是欧几里得,您可以使用任何多维搜索树进一步加速。