Sql 时间序列的SAX表示

Sql 时间序列的SAX表示,sql,time,visualization,series,Sql,Time,Visualization,Series,要创建时间序列的SAX表示,首先需要计算数据的PAA(分段聚合近似),然后将答案映射到符号表。但是,在计算PAA之前,需要对数据进行规范化 我正在对数据进行标准化,但我不知道以后如何计算PAA。有什么解决办法吗 我将使用本文中的PAA示例,并通过使用R的分段聚合近似来说明由8个点组成的时间序列到2个点的转换 所以,这里是数据,我强调了四个第一点和四个最后点(两个部分),它们的值将被聚合成一个表示“部分”的值: 现在,按照PAA程序,我们计算四个点长度段中每个点的平均值(即,我们将四个点的值聚合

要创建时间序列的SAX表示,首先需要计算数据的PAA(分段聚合近似),然后将答案映射到符号表。但是,在计算PAA之前,需要对数据进行规范化


我正在对数据进行标准化,但我不知道以后如何计算PAA。有什么解决办法吗

我将使用本文中的PAA示例,并通过使用R的分段聚合近似来说明由8个点组成的时间序列到2个点的转换

所以,这里是数据,我强调了四个第一点和四个最后点(两个部分),它们的值将被聚合成一个表示“部分”的值:

现在,按照PAA程序,我们计算四个点长度段中每个点的平均值(即,我们将四个点的值聚合为一个点):

图中显示了这两个PAA值:

p3=paa(t(X),3)
segments(1,p3[1],1+7/3,p3[1],lwd=2,col="red")
points(x=1+7/3/2,y=p3[1],col="red",pch=23,lwd=20)
segments(1+7/3,p3[2],1+7/3*2,p3[2],lwd=2,col="red")
points(x=1+7/3+7/3/2,y=p3[2],col="red",pch=23,lwd=20)
segments(1+7/3*2,p3[3],8,p3[3],lwd=2,col="red")
points(x=1+7/3*2+7/3/2,y=p3[3],col="red",pch=23,lwd=20)

现在,让我们将相同的八点长度时间序列转换为三个PAA点。但在这里,我们遇到了一个问题,当8/3不产生整数时,我们需要将“属于”相邻线段点值的一小部分添加到这些线段。这里我展示了需要转换为PAA值的同一时间序列的三个部分:

plot(X,type="l",lty=2,main="PAA example #2")
points(X,pch=16,lwd=5)
abline(v=c(1,1+7/3,1+7/3*2,8),lty=3,lwd=2)

为了执行转换,我定义了一个函数,该函数首先将原始时间序列“分解”为一个矩阵,其行数等于PAA大小,列数等于原始时间序列长度,其行值为输入时间序列值。其次,我“重塑”这个矩阵,使其列数等于PAA size,行数等于输入时间序列长度。最后,为了得到PAA值,我计算矩阵列的平均值

请注意,我使用
matlab
库来重塑表示输入时间序列的矩阵:

library(matlab)
paa <- function(ts, npoints){
  len <- length(ts)
  if(len != npoints){
    if( (len %% npoints) == 0 ){
      res <- reshape(ts, len %/% npoints, npoints)
    }else{
      tmp <- matrix(rep(ts, npoints), byrow = T,nrow = npoints)
      res <- reshape(tmp, len, npoints)
    }

    matrix(colMeans(res), nrow=1, ncol=npoints)

  } else {
    ts
  }
}

对于生产,我已经在Java中使用符号聚合近似(SAX)通过滑动窗口实现了时间序列的离散化。下面是我的示例,它实现了SAX转换及其并行化版本

具体而言,分段聚合近似(PAA)是在

谢谢

library(matlab)
paa <- function(ts, npoints){
  len <- length(ts)
  if(len != npoints){
    if( (len %% npoints) == 0 ){
      res <- reshape(ts, len %/% npoints, npoints)
    }else{
      tmp <- matrix(rep(ts, npoints), byrow = T,nrow = npoints)
      res <- reshape(tmp, len, npoints)
    }

    matrix(colMeans(res), nrow=1, ncol=npoints)

  } else {
    ts
  }
}
p3=paa(t(X),3)
segments(1,p3[1],1+7/3,p3[1],lwd=2,col="red")
points(x=1+7/3/2,y=p3[1],col="red",pch=23,lwd=20)
segments(1+7/3,p3[2],1+7/3*2,p3[2],lwd=2,col="red")
points(x=1+7/3+7/3/2,y=p3[2],col="red",pch=23,lwd=20)
segments(1+7/3*2,p3[3],8,p3[3],lwd=2,col="red")
points(x=1+7/3*2+7/3/2,y=p3[3],col="red",pch=23,lwd=20)