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

  • 9
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
好的,以下是一个简单的用Python实现符号聚合近似的代码: ``` import numpy as np import sympy def symbolic_aggregation_approximation(X, y): n_samples, n_features = X.shape # Create a symbolic variable for each feature features = [sympy.Symbol(f'x{i}') for i in range(n_features)] # Create a list of all possible products/combinations of features terms = list(sympy.ordered(sympy.Mul(*comb) for comb in sympy.combinatoric.cartesian_product( *[features] * 2))) + features # Create a matrix where each row is the evaluation of all terms for a single sample X_sym = np.empty((n_samples, len(terms))) for i in range(n_samples): for j, term in enumerate(terms): X_sym[i, j] = float(term.subs(dict(zip(features, X[i])))) # Compute the least squares solution for the linear regression problem w = np.linalg.lstsq(X_sym, y, rcond=None)[0] # Create a symbolic expression for the linear model model = sum(sympy.Mul(w[i], term) for i, term in enumerate(terms)) return model ``` 这个函数输入一个特征矩阵X和标签向量y,输出一个符号表达式,代表使用符号聚合近似得到的线性回归模型。具体实现中,在每两个特征间和所有特征间分别计算所有可能的积的组合,加上单独的特征作为符号变量,得到一个符号表达式的列表。然后,对于每个样本,将这些符号表达式替换为对应的特征值计算出在符号空间上的值,并将得到的值构成符号聚合近似矩阵。最后,使用最小二乘法得到线性回归系数,构建出符号表达式的线性模型。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值