本文摘译自https://towardsdatascience.com/introduction-to-matrix-profiles-5568f3375d90
在时间序列分析中,通常对两件事感兴趣:异常和趋势。例如,医生检查一个心电图,是为了发现表明患者高危的异常事件。在零售行业工作的个人需要了解什么商品销售以及何时出售(季节性)以增加利润。找到时间序列内异常和趋势的一种方法是执行相似连接(similarity join)。本质上,可以通过计算每对序列片段之间的距离,将时间序列的片段与自身进行比较。尽管使用嵌套循环实现朴素算法的工作量很小,但对于一个中等大小的时间序列,使用这种方法可能需要数月或数年才能得到答案。而利用Matrix Profile算法可以大大减少计算时间。
Matrix Profile是2016年推出的一种相对较新的用于时间序列分析的数据结构,由加利福尼亚河滨大学的Eamonn Keogh和新墨西哥大学的Abdullah Mueen开发。使用Matrix Profile的一些优点是,它与领域无关,快速,提供精确(在需要时近似)的解决方案并且仅需要单个参数。
Matrix Profile概述
Matrix Profile具有两个主要组成部分:Distance profile和Profile index。Distance profile是最小标准化欧几里得距离的向量。Profile index包含其第一个最近邻居的索引。换句话说,它是其最相似的子序列的位置。
计算Matrix Profile的算法使用滑动窗口方法。当窗口大小为m时,算法为:
1.计算窗口子序列相对于整个时间序列的距离
2.设置排除区域以忽略不重要的匹配
3.用最小值更新Distance profile
4.设置第一个最近邻居索引
上面概述的距离计算将会发生n-m +1次;其中,n是时间序列的长度,m是窗口大小。由于子序列是从时间序列本身中提取的,因此需要一个排除区域来防止不重要的匹配。例如,匹配自身的代码片段或非常接近自身的代码片段被视为不重要的匹配。排除区域仅是当前窗口索引前后的窗口大小(m)的一半。在计算最小距离和最近邻居索引时,将忽略这些索引处的值。下面显示了从第二个窗口开始的距离分布计算的可视化效果。
第二个窗口的值(X2到X5)在时间序列上滑动来计算每个子序列的点积。一旦计算出所有的点积,就将排除区域应用于distances,并将最小距离存储在Matrix Profile中。扔掉多余的距离,仅保持最小的距离,可以将空间复杂度降低到0(n)。
Motifs and Discords
简而言之,motif是时间序列中的重复模式,而discard则是异常。通过计算矩阵配置文件,可以轻松找到前K个motif或discard。Matrix Profile在欧几、里得空间中存储距离,这意味着接近0的距离与时间序列中的另一个子序列最相似,而远离0的距离(例如100)与任何其他子序列都不一样。提取最小距离可得出motif,最大距离可得出discard。
Matrix Profile算法
有几种算法可以计算Matrix Profile。下表提供了一些非详尽的算法列表以及有关它们的简短说明。
Matrix Profile挖掘算法
一旦计算出Matrix Profile,就必须使用其他算法从中提取信息。之前在讨论motif和discard时简要提到了这一点。这是要在Matrix Profile之上运行的算法的非详尽列表。
案例:纽约市黄色出租车出租车乘客计数
原始数据:
在不同的窗口大小上计算Matrix Profiles:
top K discords算法:
后记
正好刚入门学习Matrix Profile,没有在网上找到相关的中文学习资料,看到这篇Medium上的介绍文章还不错,就摘取了一些内容翻译过来了。这篇文章讲的很浅,要学习更多内容可以参考原文链接后的参考资料进行进一步学习。希望对大家有一些帮助。