精华内容
下载资源
问答
  • 时间类型数据被Json序列化
    千次阅读
    2019-06-18 09:06:07
    开发工具与关键技术:VS    
    作者:听民谣的老猫
    撰写时间:2019/6/12   11:07
    

    分享一下最近被解决的一个问题点——时间类型被Json序列化。
    数据查询代码:


    结果:
    在这里插入图片描述

    在查询出数据库有关时间的数据后通过return Json 返回往往会导致数据的序列化。

    解决时间类型被Json序列化

    出生日期(/Date(959616000000)/)格式化(在js中格式化时间)

    封装方法代码:

     function ChangeDateFormat(jsondate, isDateTime) {
                jsondate = jsondate.replace("/Date(", "").replace(")/", "");
                if (jsondate.indexOf("+") > 0) {
                    jsondate = jsondate.substring(0, jsondate.indexOf("+"));
                }
                else if (jsondate.indexOf("-") > 0) {
                    jsondate = jsondate.substring(0, jsondate.indexOf("-"));
                }
    
                var date = new Date(parseInt(jsondate, 10));
                var month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
                var currentDate = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
    
                var str = date.getFullYear() + "-" + month + "-" + currentDate;
    
                if (isDateTime != null && isDateTime != undefined && isDateTime == true) {
                    var hours = date.getHours() > 9 ? date.getHours() : "0" + date.getHours();
                    var minutes = date.getMinutes() > 9 ? date.getMinutes() : "0" + date.getMinutes();
                    var seconds = date.getSeconds() > 9 ? date.getSeconds() : "0" + date.getSeconds();
    
                    str = str + " " + hours + ":" + minutes + ":" + seconds;
                }
                return str;
            }
    

    调用封装方法:

    在这里插入图片描述

    结果:
    在这里插入图片描述
    封装方法解析:
    通过jsondate接收传入的序列化数据(/Date(959616000000)/),通过replace将“/Date”,“)/”
    替换成” “(空),/Date(959616000000)/通过replace替换后就变成了959616000000,然后判断是否出现特殊符号”+”,”-”,如果有就通过substring方法提取字符串第一位到特殊符号前面一位(substring方法在我前面的博客中有详细讲解),通过parseInt将数据转成整型,然后转成一个日期类型。取出月份,通过三木运算取出月份数值是否<10。为了格式工整如果取出的月份小于10就在月份前面拼接上一个0。(三目运算在我前面的博客中有详细讲解)(日期的提取和月份一样)然后是字符串的拼接var str = date.getFullYear() + “-” + month + “-” + currentDate;(年,月,日)时分秒的拼接由调用方法填的参数true决定,时分秒的提取同上。

    出生日期(/Date(1530491400000)/)格式化(在js中格式化时间)

    调用封装方法:(封装方法同上)
    在这里插入图片描述
    结果:
    在这里插入图片描述

    更多相关内容
  • 针对时间序列的数据挖掘将时间序列数据转换为离散的符号序列, 提出了一种基于滑动窗口及局部特征的时间序列符号化方法。该方法采用了滑动窗口的方法将时间序列分割, 每个分段采用多个斜率表示, 最后采用K-均值聚类...
  • 基于奇异事件特征聚类的时间序列符号化方法.pdf
  • 符号化时间序列.rar

    2020-05-08 16:05:04
    代码实现了将时间序列根据所给符号类别数等概率划分成多个区间,根据所给字节长度数实现时间序列符号化频次直方图序列的转换,并包含一个简单样本的转化实现
  • 对如何将时间序列转化为符号序列,即信号符号化问题,通过最简单的二进制划分及其配套图形作了简要说明.给出了二进制划分下符号树结构及其Shannon熵计算方法,讨论了时延τ、符号集大小Ns和树层数(符号序列长度)对...
  • 提出了一种基于DTW的符号化时间序列聚类算法,对降维后得到的不等长符号时间序列进行聚类。该算法首先对时间序列进行降维处理,提取时间序列的关键点,并对其进行符号化;其次利用DTW方法进行相似度计算;最后利用...
  • Introduction简言之,SAX算法就是将时间序列进行符号化表示。这个算法最初是由Lin et al.提出的,它扩展了基于PAA的方法并继承了原始方法的简单和低复杂度的特点,同时在范围查询的过程中提供了令人满意的灵敏度和可...

    Introduction

    简言之,SAX算法就是将时间序列进行符号化表示。

    这个算法最初是由Lin et al.提出的,它扩展了基于PAA的方法并继承了原始方法的简单和低复杂度的特点,同时在范围查询的过程中提供了令人满意的灵敏度和可选择性。除此之外,符号化的特征表示为现在存在的丰富的数据结构和字符串处理算法(哈希、正则表达式、模式匹配、后缀树和语法推断)开启了一扇大门。

    The algorithm

    SAX将一段长度为n的时间序列X转换为一段任意时间长度的字符串。这个算法包括两个步骤:

    (1)、将原始时间序列数据转换为PAA特征表示。

    (2)、将PAA数据转换为字符串。

    PAA的使用带来了简单有效的降维性,同时也提供了重要的下边界属性。使用查表的方法将PAA系数转换为字母的计算效率也很高,Lin et al.证明了符号距离的收缩性。

    将一段时间序列的PAA特征表示离散化到SAX中,得到的符号与时间序列的特征相对应,具有相同的概率。对原始算法的作者所使用的各种时间序列的数据集进行了广泛而又严格的分析,结果表明z-normalized的时间序列的值遵循正态分布。通过使用它的属性,可以很容易的在正常曲线下使用查表法来确定直线坐标,分割高斯曲线下的区域。

    这些行的x坐标在SAX上下文中称为断点(breakpoints),列表中的断点将在N(0,1)分布中的数据划分到了a个相同的区域。通过将相应的字母符号对应到每个区间,矢量的转换PAA系数C~到字符串C^的实现如下:



    SAX通过拓展欧式距离和PAA距离引入了度量字符串之间距离的新指标。这个函数返回两个原始时间序列Q^和C^的字符串特征之间的最小距离。

    如下表所示,使用查表的方式实现dist函数,并计算每个单元格的cell(r, c)的值:

    四个字母的查找表

          a          b          c          d     
    a000.671.34
    b0000.67
    c0.67000
    d1.340.6700

    如Li等人所示,这个SAX距离指标的下界要低于PAA距离指标的下界:

    Ding等人对SAX下界进行了详细的检验,发现了其精度优于bursty(非周期)数据集的谱分解方法。

    SAX primer

    1 时间序列数据

    我们将用到下边的时间序列来作为例子(ts1和ts2的欧式距离是11.4)

    > ts1=c(2.02, 2.33, 2.99, 6.85, 9.20, 8.80, 7.50, 6.00, 5.85, 3.85, 4.85, 3.85, 2.22, 1.45, 1.34)
    > ts2=c(0.50, 1.29, 2.58, 3.83, 3.25, 4.25, 3.83, 5.63, 6.44, 6.25, 8.75, 8.83, 3.25, 0.75, 0.72)
    > dist(rbind(ts1,ts2), method = "euclidean")
             ts1
    ts2 11.42126

    我们将把它转换为长度为9的字符串,它的字母来自大小为4的字母表。

    2 Z-normalization

    在用SAX转换字符串之前,我们将对数据进行Z-normalization处理。

    znorm <- function(ts){
      ts.mean <- mean(ts)
      ts.dev <- sd(ts)
      (ts - ts.mean)/ts.dev
    }
    
    ts1_znorm=znorm(ts1)
    ts2_znorm=znorm(ts2)

    PAA遵循这个标准过程。

    3 PAA转换

    PAA

    paa <- function(ts, paa_size){
      len = length(ts)
      if (len == paa_size) {
        ts
      }
      else {
        if (len %% paa_size == 0) {
          colMeans(matrix(ts, nrow=len %/% paa_size, byrow=F))
        }
        else {
          res = rep.int(0, paa_size)
          for (i in c(0:(len * paa_size - 1))) {
            idx = i %/% len + 1# the spot
            pos = i %/% paa_size + 1 # the col spot
            res[idx] = res[idx] + ts[pos]
          }
          for (i in c(1:paa_size)) {
            res[i] = res[i] / len
          }
          res
        }
      }
    }
    paa_size=9
    s1_paa = paa(ts1_znorm,paa_size)
    s2_paa = paa(ts2_znorm,paa_size)

    4 将PAA值转换为字母

    如上表所示,我是用了四个字母(a, b, c, d)。这四个字母的分割线如下图中蓝色的线所示。

    SAX通过9点PAA将ts1转换为字符串abddccbaa。

    SAX通过9点PAA将ts2转换为字符串abbccddba。

    SAX距离:0 + 0 + 0.67 + 0 + 0 + 0 + 0.67 + 0 + 0 = 1.34

    在图中,橙色描绘了被计数的符号之间的距离(它们在表格中不是相邻的)。


    原文链接 https://jmotif.github.io/sax-vsm_site/morea/algorithm/SAX.html

    展开全文
  • 因此,提出利用时间序列符号化技术压缩原始序列,并构造网络的方法。该方法使用最小二乘估计时序分段斜率,提取序列的局部特征,并构造字典判断节点是否邻接。模拟实验表明,所建网络的标度指数、集群系数与过程的...
  • 针对符号化聚合近似算法(SAX)中时间序列必须等长分割的缺陷,提出一种基于分割模式的时间序列符号化算法(SMSAX)。利用三角阈值法对随机抽样的时间序列进行特征提取,计算时间序列最大压缩比,将其作为时间窗宽提取...
  • SAX全称 Symbolic Aggregate Approximation, 中文意思是符号近似聚合,简单的说是一种把时间序列进行符号化表示的方法。 SAX的基本步骤如下: (1)将原始时间序列规格化,转换成均值为0,标准差为1 的的序列,原...

       SAX全称 Symbolic Aggregate Approximation, 中文意思是符号近似聚合,简单的说是一种把时间序列进行符号化表示的方法。

    SAX的基本步骤如下:

    (1)将原始时间序列规格化,转换成均值为0,标准差为1 的的序列,原论文中解释的原因如下:

           

            

    (2)通过PAA(Piecewise Aggregate Approximation)进行降维,将长为 n 的原始时间序列{C} = c_{1}c_{2} ,..., c_{n}转换长为 w 的序列\bar{C}=\bar{c1},\bar{c2},...,\bar{cw}

    简单的说,PAA就是先把原始序列分成等长的 w 段子序列,然后用每段子序列的均值来代替这段子序列。 

    PAA降维的公式如下:

                                                

    转换后的图如下:

                                     

    (3)符号化表示。先选定字母集的大小α, (就是你想用多少个字母来表示整个时间序列,比如选三个字母‘a’, 'b', 'c',则α=3)

    然后在下面的表格中查找区间的分裂点\beta _{i},将PAA表示的均值映射为相应的字母,最终离散化为字符串\hat{C}=\left \{ \hat{c1},\hat{c2} ,...,\hat{cw} \right \}

                                      

    符号化之后的图:

                                         

    这样原始的时间序列就离散化为字符串:baabccbc

    符号化后的时间序列间的距离计算:

    给定两个长度都为 n 时间序列 Q 和 C,则序列Q和序列C之间的欧式距离可以用下面计算:

                                                       

    两个原始时间序列的距离:

                                         

    当时间序列 Q 和 C 经过PAA降维之后,变成,时间序列的欧式距离计算公式如下:(此公式计算的是两个原始时间序列之间的欧氏距离的下边界近似值,关于下界定理和下边界紧凑性的说明在博客:下界(lower bounding)定理和下界紧密性比较

                                                  

     

    此时计算的距离是:

                                            

    经过符号化之后,时间序列 Q  和 C 变成  和 ,欧式距离的计算公式为:(两个原始时间序列之间的最小距离)                                              

    此时计算的距离为:

     

                                                   

    公式中的dist()函数可以从距离表中查到,比如我们选的字母集的大小为4的时候距离表如下:

                                              

    此时 dist(a, b)=0,  dist(a, c)=0.67

    注意:不同的字母集大小的距离表不同。

    距离表中每个单元格的值可以由一下公式计算:

                                           

    公式中的 \beta _{i} 的值是在第二步中的表中。

     

    代码如下

    import numpy as np
    import math
    
    class SAX_trans:
        
        def __init__(self, ts, w, alpha):
            self.ts = ts
            self.w = w
            self.alpha = alpha
            self.aOffset = ord('a') #字符的起始位置,从a开始
            self.breakpoints = {'3' : [-0.43, 0.43],
                                '4' : [-0.67, 0, 0.67],
                                '5' : [-0.84, -0.25, 0.25, 0.84],
                                '6' : [-0.97, -0.43, 0, 0.43, 0.97],
                                '7' : [-1.07, -0.57, -0.18, 0.18, 0.57, 1.07],
                                '8' : [-1.15, -0.67, -0.32, 0, 0.32, 0.67, 1.15],
                
            }
            self.beta = self.breakpoints[str(self.alpha)]
            
        def normalize(self):  # 正则化
            X = np.asanyarray(self.ts)
            return (X - np.nanmean(X)) / np.nanstd(X)
    
        def paa_trans(self):  #转换成paa
            tsn = self.normalize() # 类内函数调用:法1:加self:self.normalize()   法2:加类名:SAX_trans.normalize(self) 
            paa_ts = []
            n = len(tsn)
            xk = math.ceil( n / self.w )  #math.ceil()上取整,int()下取整
            for i in range(0,n,xk):
                temp_ts = tsn[i:i+xk]
                paa_ts.append(np.mean(temp_ts))
                i = i + xk
            return paa_ts
        
        def to_sax(self):   #转换成sax的字符串表示
            tsn = self.paa_trans()
            len_tsn = len(tsn)
            len_beta = len(self.beta)
            strx = ''
            for i in range(len_tsn):
                letter_found = False
                for j in range(len_beta):
                    if np.isnan(tsn[i]):
                        strx += '-'
                        letter_found = True
                        break                   
                    if tsn[i] < self.beta[j]:
                        strx += chr(self.aOffset +j)
                        letter_found = True
                        break
                if not letter_found:
                    strx += chr(self.aOffset + len_beta)
            return strx
        
        
        def compare_Dict(self):   # 生成距离表 
            num_rep = range(self.alpha)  #存放下标
            letters = [chr(x + self.aOffset) for x in num_rep]   #根据alpha,确定字母的范围
            compareDict = {}
            len_letters = len(letters)
            for i in range(len_letters):
                for j in range(len_letters):
                    if np.abs(num_rep[i] - num_rep[j])<=1:
                        compareDict[letters[i]+letters[j]]=0
                    else:
                        high_num = np.max([num_rep[i], num_rep[j]])-1
                        low_num = np.min([num_rep[i], num_rep[j]])
                        compareDict[letters[i]+letters[j]] = self.beta[high_num] - self.beta[low_num]
            return compareDict
       
        def dist(self, strx1,strx2):   #求出两个字符串之间的mindist()距离值
            len_strx1 = len(strx1)
            len_strx2 = len(strx2)
            com_dict = self.compare_Dict()
    
            if len_strx1 != len_strx2:
                print("The length of the two strings does not match")
            else:
                list_letter_strx1 = [x for x in strx1]
                list_letter_strx2 = [x for x in strx2]
                mindist = 0.0
                for i in range(len_strx1):
                    if list_letter_strx1[i] is not '-' and list_letter_strx2[i] is not '-':
                        mindist += (com_dict[list_letter_strx1[i] + list_letter_strx2[i]])**2
                mindist = np.sqrt((len(self.ts)*1.0)/ (self.w*1.0)) * np.sqrt(mindist)
                return mindist
      
                        
    # 测试            
    ts1 = [6.02, 6.33, 6.99, 6.85, 9.20, 8.80, 7.50, 6.00, 5.85, 3.85, 6.85, 3.85, 2.22, 1.45, 4.34,
          5.50, 1.29, 2.58, 3.83, 3.25, 6.25, 3.83, 5.63, 6.44, 6.25, 8.75, 8.83, 3.25, 0.75, 0.72]
    
    ts2 = [0.50, 1.29, 2.58, 3.83, 3.25, 4.25, 3.83, 5.63, 6.44, 6.25, 8.75, 8.83, 3.25, 0.75, 0.72,
          2.02, 2.33, 2.99, 6.85, 9.20, 8.80, 7.50, 6.00, 5.85, 3.85, 6.85, 3.85, 2.22, 1.45, 4.34,]
    x1 = SAX_trans(ts=ts1,w=6,alpha=3)
    x2 = SAX_trans(ts=ts2,w=6,alpha=3)
    st1 = x1.to_sax()
    st2 = x2.to_sax()
    dist = x1.dist(st1,st2)
    print('st1',st1)
    print('st2',st2)
    print(dist)
                
            

    输出如下:

                   

    Reference:

    Lin J , Keogh E J , Lonardi S , et al. A Symbolic Representation of Time Series, with Implications for Streaming Algorithms[C]// Proceedings of the 8th ACM SIGMOD workshop on Research issues in data mining and knowledge discovery, DMKD 2003, San Diego, California, USA, June 13, 2003. ACM, 2003.

    SAX (Symbolic Aggregate Approximation) 一种时间序列的新型符号化方法

    SAX(Symbolic Aggregate Approximation

    https://github.com/nphoff/saxpy/blob/master/saxpy.py


    。。。

    展开全文
  • 一种改进的符号化时间序列聚类方法.pdf
  • DFT的matlab源代码具有SEQL和多个符号表示...SFA还将时间序列转换为符号表示,但是这次使用频域进行离散。 SAX和SFA之间的核心区别是近似和离散技术的选择。 SFA使用离散傅立叶变换(DFT)方法来近似时间序列。 有
  • 到目前为止能够计算字符化时间序列的距离度量的...该方法既能进行维度约简又允许在符号化后的时间序列表示法上定义距离度量。实验分别在合成数据和实际数据上进行,实验表明该方法具有更高的运算效率且需要较少的空间。
  • 提出了一种分析生理时间序列的方法,即对重构的相空间进行符号化分析。因生理时间序列通常是非平稳的,为去除时间序列中的局部趋势、提取时间序列的波形特征,相空间中的向量被归一化,从而具有相同的均值和标准差。...
  • 基于关键点的符号化聚合近似(SAX)改进算法(KP_SAX)在SAX的基础上利用关键点对时间序列进行点距离度量,能更有效地计算时间序列的相似性,但对时间序列的模式信息体现不足,仍不能合理地度量时间序列的相似性。...
  • 利用谱聚类发现符号化时间序列中的模式.pdf
  • 大数据-算法
  • 为了克服该方法耗时长、计算量大的缺点, 采用一种符号化算法, 用扩展符号聚集近似对序列符号化表示, 再对字符串进行距离度量, 并以太湖流域小梅口站逐日水位数据为例进行验证。实验表明该方法的挖掘结果更全面, 运算...
  • 基于小波熵的时间序列符号聚合近似表示,王会青,白莹莹,??符号聚合近似(SAX)能有效地对时间序列数据进行降维,是一种简单、高效的算法。现有的SAX表示法对波动性相对较大的序列只能反映子��
  • 样本熵(或近似熵)以信息增长率刻画时间序列的复杂性,能应用于短时序列,因而在生理信号分析中被广泛采用.然而,一方面由于传统样本熵采用与标准差线性相关的容限,使得熵值易受非平稳突变干扰的影响,另一方面传统样本熵...
  • 在对时间序列经过符号化处理获得两类字符串集合的基础上,提出了一种非同步时间序列特征模式提取算法,该算法的核心是利用约简方法快速找到一个能充分区分两类字符串集合的模式,从而可以发现所有包含此模式的时间...
  • 提出了一种新的固定分段数的表示方法——PLR_BTBU,首先根据二叉树层次遍历的思想,提取时间序列全局特征点将时间序列初始分段,再通过斜率变化特征将整个时间序列符号化,以各初始分段内的符号特征来确定各初始分段...
  • SAX((Symbolic Aggregate approXimation,符号集合近似)算法是将时间序列转换为字符串。 一种符号表示,并展示了它在其他时间序列任务上的实用性。表示的独特之处在于它允许降维,它还允许在符号表示上定义距离...


    0. 前言

    SAX((Symbolic Aggregate approXimation,符号集合近似)算法是将时间序列转换为字符串。
    一种符号表示,并展示了它在其他时间序列任务上的实用性。表示的独特之处在于它允许降维,它还允许在符号表示上定义距离度量,该符号表示下界对应于原始数据上定义的流行距离度量。它允许人们在有效操作的符号表示上运行某些数据挖掘算法,同时产生与对原始数据进行操作的算法相同的结果。

    1. SAX的特性

    1.可以进行数据降维。

    2.可以在符号表示上定义距离度量,并且满足下界定理。

    3.可以进行数据压缩。

    4.SAX保留了原始时间序列的大体形状。SAX是一种符号表示法,因此字母表可以存储为位(bits)而不是双精度浮点数,从而节省了大量空间。

    2. SAX算法

    2.1 表示方法

    SAX将任意长度n的时间序列缩减为任意长度w的字符串。其中w<n,通常w<<n。

    通过SAX方法可将时间序列表示结果保存在一个字母表中。字母表大小是任意整数a。a>2.
    论文中使用的符号

    2.2 表示过程及要点

    首先将数据转换为分段聚合近似(PAA)表示,然后将PAA表示符号化为离散字符串。

    先转换为PAA,在将PAA符号化,由此可以利用PAA的降维能力。

    满足下界定理(Lower Bounding),时间序列之间由PAA表示的距离小于欧氏距离,由SAX表示的距离又小于由PAA的距离。

    3. 数据降维

    将n维时间序列C = c1, c2 , . . . , cn转换为w维的向量𝐶 ̅ = c ̅1 , 𝑐 ̅2 , . . . , 𝑐 ̅w其中,第i个𝑐 ̅i是按照下式计算:
    原始序列代换为PAA均值
    为了将n维原始的时间序列向量降到w维,将原始时间序列向量划分为w个片段, 𝑐 ̅i是第i个片段的均值。

    将时间序列从n维减少到w维,也就是说数据被分成w个相等大小的“帧”。

    其中,将n/w​称为压缩率,必须保证为整数。
    128维数据降维成8帧

    4. 离散化

    将每个时间序列归一化,然后将其转换为PAA表示。归一化时间序列具有高斯分布,因此方便实现时间序列的离散化。

    通过求取使得高斯分布被划分成任意数量等概率区间的断点序列B,然后通过断点列表B和PAA近似序列值完成符号化。

    断点列表的a-1个值对应标准正态分布的随机变量值。可在统计表中查询。任意相邻两个断点之间对应的高斯分布概率值相等。
    高斯分布的断点
    断点列表(Breakpoints):断点列表是有序的数字序列B = β1,β2,……,βa-1,其中βi和βi+1之间对应的高斯分布的概率值相对间隔为1/a 。β0,βa分别表示-∞和+∞。

    获得断点后,可以对时间序列进行离散化。首先得到时间序列的PAA,小于最小断点的所有PAA系数被映射到符号“a”,大于或等于最小断点并且小于第二小断点的所有系数被映射到符号“b”,以此类推。
    符号表示效果
    单词(word)列表:将表示一个子序列的符号的连接称为单词。

    长度为n的子列C可以表示为一个word,𝐶 ̂ = c ̂1,……, c ̂w

    用alphai代表字母表中的第i个元素,从PAA近似𝐶 ̅到单词𝐶 ̂的映射满足下式:
    归一化后的均值在两相邻断点之间。

    5. 距离度量

    时间序列常用的距离度量是欧几里德距离:
    欧氏距离
    对时间序列降维后,特征空间查询中容易出现漏报(false dismissals)的问题。

    漏报指原始空间中两点小于阈值δ,但降维后两点距离大于δ,导致没有报告查询结果。

    Faloutsos等人提出了下界(Lower Bounding)定理来保证无漏报(false dismissals):
    下界定理
    即降维后的特征向量之间的距离小于等于原始序列之间的距离。

    引申到SAX中,即PAA表示的距离小于传统的欧氏距离,SAX表示的距离小于PAA表示的距离。

    将n维时间序列C,Q转换为w维的向量𝐶 ̅ , 𝑄 ̅后得到PAA表示,将数据降维的公式代换到欧氏距离中得到PAA的距离度量公式:
    PAA距离
    进一步将数据转换为符号表示,这里定义了一个MINDIST函数,该函数返回两个单词(word)的原始时间序列之间的最小距离:
    SAX距离
    MINDIST即SAX的距离度量,就是用dist()函数进行了替换。该函数可由查找表实现。

    三种距离
    (A)两个时间序列之间的欧几里得距离可以表示为每对相应点的平方差之和的平方根
    (B)PAA近似定义的距离度量可以看作是每对相应的PAA系数之间的平方差之和乘以压缩率的平方根的平方根。
    (C)时间序列的两个SAX表示之间的距离需要查找每对符号之间的距离,将它们平方,求和,取平方根,最后乘以压缩率的平方根。

    通过严谨的证明得到:
    欧式大于等于PAA
    PAA大于SAX
    因此满足下界定理,不会发生漏报的情况。

    这里存在一个优化的方向,即提高下界的紧密性(Tightness of Lower Bound,TLB) 其通用表示为:
    TLB
    本文中表示为:
    SAX与欧式
    显然TLB取值介于0和1之间,值越接近1,说明下界距离越接近真实距离度量,误差越小。

    6. 数据压缩

    对于一个很长的时间序列T, 使用长度为n的滑动窗口去提取子序列。使用SAX方法提取时,如果第一次提取到序列aabbcc,那么就不再存储后续提取的序列aabbcc,而是将其映射到第一次出现该序列的索引位置处。这样就实现了数据压缩。
    第二段应该也是aabbcc,原文中的图有错

    7. 一些问题及解决方法

    1.对相对平稳的区域子序列进行归一化可能会放大噪声。
    放大噪声
    处理这个问题的方法为:如果归一化前序列的标准差低于ε,我们只需将整个单词分配给中间字母表(例如,如果a=5,则为cccccc)。

    2.假设n必须被w整除,这限制了对w的选择,如果n是质数,则是有问题的。如果n不能被w整除,可以把不知道放在哪的那些点的一部分放在一起,而不是把整个点放在一个片段中。
    点分为两部分

    参考:
    1.Jessica Lin,Eamonn Keogh,Li Wei,Stefano Lonardi.Experiencing sax:a novel symbolic representation of time series[J].Data Mining and knowledge discovery,2007,15(2):107—144.

    2.基于SAX的时间序列相似性度量方法_李桂玲

    3.https://blog.csdn.net/tony_stark_wang/article/details/88248701

    4.https://blog.csdn.net/weixin_38292570/article/details/107005452

    展开全文
  • 经典SAX符号化算法

    2018-09-12 17:45:29
    经典的时间序列符号化算法SAX,该算法通过将一条时间序列等区间划分,利用每个区间的均值代表该区间序列,进而采用相应的符号进行描述,该算法可以实现时间序列的符号化表示,达到降维的目的,并能够通过MATLAB进行...
  • 针对符号化时间序列提取motif导致信息丢失的问题,提出基于剪枝技术的motif提取算法PM_Motif,实现了保留原始信息的motif的精准快速提取;针对分割motif来发现其内部关联规则导致的规则不一致的问题,从motif间的...
  • 讨论了将时间序列转化为符号序列,即信号粗粒化问题,给出二进制符号化和角区间符号化两种规则,得到了二进制符号化规则下的符号序列Shannon熵计算方法。采用Shannon熵提取了汽油机瞬态排放信号、柴油机机身振动信号...
  • 符号化表示是一种有效的时间序列降维技术,其相似性度量是诸多挖掘任务的基础。基于SAX(symbolic aggregate approximation)的距离MINDIST_PAA_iSAX不满足对称性,在时间序列挖掘中具有局限性,提出了对称的度量Sym_...
  • 此外,此工具箱实现了用于符号时间序列处理的工具和类。 核心组件 (mdtsObject) 的文档可以在 Documentation/mdtsToolboxDocu.pdf 中找到。 可以在文档/IntroductionToUseMDTSObjects_V1.pdf 中找到简短的介绍...
  • 时间序列符号化后,使用基于Sequitur的候选模式算法获取候选i-patterns及其事件位置序列,通过基于OEOP的i-patterns有效段生成算法得到1-pattern和i-patterns的有效段及周期,从而生成有效子序列。实验结果表明,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 128,883
精华内容 51,553
关键字:

时间序列符号化

友情链接: ARMA.rar