我正在尝试开发一个能够理解两条线图相似的脚本(它们具有相似的方向或相似的值)。
例如,假设我有两个数组:
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 :(得分:1)
通常可以将对象从域映射到线性空间。例如,您可以看到自然语言中单词嵌入的工作原理(word2vec tutorial,跳到"可视化学习嵌入")。在此设置中,对象之间的相似性由线性空间中的距离定义,计算速度非常快。
映射在您的情况下有多复杂取决于您的数据:图表的多样性以及您希望捕获的相似性。
在具有两个向量的示例中,可以计算单个值:regression line的斜率。这可能会起作用,你的图表有点线性"在自然界。如果您还想捕获正弦曲线模式,可以尝试通过减去第一个值来标准化时间序列。同样,在您的特定示例中,它将显示完美契合。
底线:映射的复杂性取决于数据的复杂性。
答案 1 :(得分:1)
如果它们总是具有相同的长度,那么 Pearson相关应该更合适,速度更快。
如果你标准化你的向量,Pearson是欧几里得,你可以使用任何多维搜索树进一步加速。