时间序列数据中的顺序模式匹配

机器算法验证 时间序列 模式识别
2022-03-22 20:06:19

如果我有一个时间序列集,例如 x=[0,2,5,2,3,1,0] 代表一个工件。

在更大的数据集 y 中匹配与 x 相似的集合的最佳方法是什么?

2个回答

我想到了一些方法,但这个列表远非详尽无遗:

  • Andreas Brandmaier 的置换分布聚类是一种植根于时间序列之间差异的方法,形式化为它们的置换分布之间的差异。就个人而言,我认为这是您的“最佳”选择

http://cran.r-project.org/web/packages/pdc/index.html

  • Eamonn Keogh 的SAX(符号聚合近似)和iSAX例程为时间序列开发“形状聚类”

http://www.cs.ucr.edu/~eamonn/SAX.htm

  • 有一些基于文本压缩算法的方法可以消除字符(或数字)序列中的冗余,创建一种距离或密度度量,可用作聚类的输入

参见,例如, http: //link.springer.com/chapter/10.1007/978-0-387-84816-7_4

  • Rob Hyndman 的这篇论文使用全局特征对时间序列进行降维,讨论了将时间序列压缩为一小组全局矩或度量,并在这些上进行聚类:

http://www.robjhyndman.com/papers/wang2.pdf

  • Aggarwal 和 Reddy 的优秀著作《数据聚类》中的第 15 章专门介绍了时间序列聚类方法的范围广泛(实际上是一份清单)(第 357-380 页)。讨论为许多特定于聚类时间序列的问题提供了极好的背景”

http://users.eecs.northwestern.edu/~goce/SomePubs/Similarity-Pubs/Chapter-ClusteringTimeSeries.pdf

您可以在 R 中执行此操作。您的时间序列数据由 表示,v您希望匹配的模式由表示p返回匹配索引。

> v<-c(1,2,3,4,5,6,7,8,9,1,2,3,4,6,7,5,8,1,2,3,4,5)
> p<-"123"
> gregexpr(p,paste(v,collapse = ""))

[[1]]
[1]  1 10 18
attr(,"match.length")
[1] 3 3 3
attr(,"useBytes")
[1] TRUE