我们通常认为时序数据为一维数据,实际上时序数据隐含另外一个维度就是时间。但有时我们可能需要从其他维度来解读单变量时序数据,例如我们可以把时序数据转换为空间数据,就是类似图像的数据,后续可以使用卷积神经网络来进行特征提取。达到这一目的有两个常用方法,格拉姆角场(Gramian Augular Fields, GAF)和马尔可夫转换场(Markov Transition Fields, MTF)。本篇文章主要介绍GAF,下一篇介绍MTF。
GAF牵涉到了太多的数学,本文结合一些简单的数学知识,主要是从直观上解释GAF。
首先让我们回忆一下两个向量内积的定义:
⟨ a , b ⟩ = ∥ a ∥ ∥ b ∥ cos θ \langle a, b\rangle = \lVert a \rVert \lVert b \rVert \cos \theta ⟨a,b⟩=∥a∥∥b∥cosθ
其中, θ \theta θ 为两个向量的夹角。如果我们忽略向量的长度,那么向量内积就可以被理解为两个向量的相似程度。越相近,内积值越接近 1 1 1;而反之则接近 − 1 -1 −1 。
我们引入Gram Matrix,想象我们保存一个列向量的集合在一个矩阵 X X X 中,Gram Matrix定义为:
G = X T X G = X^TX G=XTX ,可以展开为
G = [ ⟨ x 1 , x 1 ⟩ ⟨ x 1 , x 2 ⟩ … ⟨ x 1 , x N ⟩ ⟨ x 2 , x 1 ⟩ ⟨ x 2 , x 2 ⟩ … ⟨ x 2 , x N ⟩ … … … … ⟨ x N , x 1 ⟩ ⟨ x N , x 2 ⟩ … ⟨ x N , x N ⟩ ] G = \begin{bmatrix} \langle x_1, x_1 \rangle & \langle x_1, x_2 \rangle & … & \langle x_1, x_N \rangle \\ \langle x_2, x_1 \rangle & \langle x_2, x_2 \rangle & … & \langle x_2, x_N \rangle \\ … & … & … & … \\ \langle x_N, x_1 \rangle & \langle x_N, x_2 \rangle & … & \langle x_N, x_N \rangle \end{bmatrix} G=⎣ ⎡⟨x1,x1⟩⟨x2,x1⟩…⟨xN,x1⟩⟨x1,x2⟩⟨x2,x2⟩…⟨xN,x2⟩…………⟨x1,xN⟩⟨x2,xN⟩…⟨xN,xN⟩⎦ ⎤
可以看出Gram矩阵就是向量集合中每对向量之间的内积。
读者看到这里,可能会疑惑,所说的这些和时序数据有什么关系呢。时序数据的每个数据点并不是一个向量而是一个标量。确实如此,GAF并不直接应用Gram矩阵。
GAF的第一步是把时序数据规范化到区间[-1, +1] ,假设时序数据为 X = x 1 , x 2 , … , x N X = {x_1, x_2, …, x_N } X=x1,x2,…,xN ,规范化后的值记为 x i ~ \tilde{x_i} xi~ ;规范化后Gram Matrix就如下所示:
G = [ c o s ( ϕ 1 , 1 ) c o s ( ϕ 1 , 2 ) … c o s ( ϕ 1 , n ) c o s ( ϕ 2 , 1 ) c o s ( ϕ 2 , 2 ) … c o s ( ϕ 2 , n ) … … … … c o s ( ϕ n , 1 ) c o s ( ϕ n , 2 ) … c o s ( ϕ n , n ) ] G = \begin{bmatrix} cos(\phi_{1,1}) & cos(\phi_{1,2}) & … & cos(\phi_{1,n}) \\ cos(\phi_{2,1}) & cos(\phi_{2,2}) & … & cos(\phi_{2,n}) \\ … & … & … & … \\ cos(\phi_{n,1}) & cos(\phi_{n,2}) & … & cos(\phi_{n,n}) \end{bmatrix} G=⎣ ⎡cos(ϕ1,1)cos(ϕ2,1)…cos(ϕn,1)cos(ϕ1,2)cos(ϕ2,2)…cos(ϕn,2)…………cos(ϕ1,n)cos(ϕ2,n)…cos(ϕn,n)⎦ ⎤
这里的 ϕ i , j \phi_{i,j} ϕi,j 表示向量 i i i与向量 j j j 之间的夹角。
转化到这里,让我们进一步分析一下采用Gram矩阵的原因。Gram矩阵表示了向量集合中的向量两两之间的内积,我们可以理解为 G G G 表示了向量之间的相关程度,而这种相关程度实际上是由向量之间的夹角来决定的。前面也提到过,时序数据点并不是向量,那么如何解决这个问题呢?是否可以将其转化为带有角度的表示呢?答案是肯定的:极坐标。
第二步是把规范化后的值转化为极坐标,
ϕ i = arccos x i ~ \phi_i = \arccos \tilde{x_i} ϕi=arccosxi~
r i = t i N r_i = \frac{t_i}{N} ri=Nti
其中, t i ∈ N t_i \in \mathbb{N} ti∈N 代表了点 x i x_i xi 的时间戳, N N N 是时序数据中所包含的所有时间点的个数。
每一个时序点数据包含两个信息:一个是该数据点的规范化值 x i ~ \tilde{x_i} xi~;另一个是其所在的时序位置 t i t_i ti 。上面的极坐标转换编码把这两个信息都包含了进来,且没有损失任何信息,从数学上看是一个双射函数,也就是说此函数的自变量和因变量具有一一对应的关系,正反两方向都是如此。极轴 r i r_i ri 保留了时间上的关系;极角 ϕ i \phi_i ϕi 保留了数值上的关系。
对时序数据进行极坐标可以解释为从另一个角度来理解数据。当时间向前滚动时,数据点将类似水波纹一样展开。
把每个时序点转换为极坐标编码后任然没有解决如何表示Gram矩阵中的角度定义相关程度问题。
GAF定义了自己的特殊的内积: ⟨ x 1 , x 2 ⟩ = cos ( ϕ 1 + ϕ 2 ) \langle x_1, x_2 \rangle = \cos(\phi_1 + \phi_2) ⟨x1,x2⟩=cos(ϕ1+ϕ2) ,就是说两个时序点之间的"内积"是这两个时序点的极坐标转化后的极角之和的余弦,形如:
G = [ c o s ( ϕ 1 + ϕ 1 ) c o s ( ϕ 1 + ϕ 2 ) … c o s ( ϕ 1 + ϕ n ) c o s ( ϕ 2 + ϕ 1 ) c o s ( ϕ 2 + ϕ 2 ) … c o s ( ϕ 2 + ϕ n ) … … … … c o s ( ϕ n + ϕ 1 ) c o s ( ϕ n + ϕ 2 ) … c o s ( ϕ n + ϕ n ) ] G = \begin{bmatrix} cos(\phi_1+\phi_1) & cos(\phi_1+\phi_2) & … & cos(\phi_1+\phi_n) \\ cos(\phi_2+\phi_1) & cos(\phi_2+\phi_2) & … & cos(\phi_2+\phi_n) \\ … & … & … & … \\ cos(\phi_n+\phi_1) & cos(\phi_n+\phi_2) & … & cos(\phi_n+\phi_n) \end{bmatrix} G=⎣ ⎡cos(ϕ1+ϕ1)cos(ϕ2+ϕ1)…cos(ϕn+ϕ1)cos(ϕ1+ϕ2)cos(ϕ2+ϕ2)…cos(ϕn+ϕ2)…………cos(ϕ1+ϕn)cos(ϕ2+ϕn)…cos(ϕn+ϕn)⎦ ⎤
上面这个带有自定义内积的矩阵就是GAF的结果。我们可以看到这是一个 n × n n\times n n×n 的方阵,时间被编码成方阵的几何维度 1 ⋯ n {1\cdots n} 1⋯n 。相比于原时序数据,GAF增加了一个维度的信息,那么它到底增加了什么,或者说从原数据转化出了什么呢? 当时间滚动时,GAF把时序数据的每一个点转化成了这个点与其他点的相关关系,这种关系使用GAF自定义的内积来度量的。
我们再进一步拆解一下,
c o s ( θ 1 + θ 2 ) = c o s ( a r c c o s ( x ) + a r c c o s ( y ) ) = c o s ( a r c c o s ( x ) ) ⋅ c o s ( a r c c o s ( y ) ) − s i n ( a r c c o s ( x ) ) ⋅ s i n ( a r c c o s ( y ) ) = x ⋅ y − 1 − x 2 ⋅ 1 − y 2 cos(\theta_1+\theta_2)=cos(arccos(x)+arccos(y)) \\=cos(arccos(x)) \cdot cos(arccos(y))-sin(arccos(x))\cdot sin(arccos(y)) \\ =x \cdot y-\sqrt{1-x^2}\cdot \sqrt{1-y^2} cos(θ1+θ2)=cos(arccos(x)+arccos(y))=cos(arccos(x))⋅cos(arccos(y))−sin(arccos(x))⋅sin(arccos(y))=x⋅y−1−x2⋅1−y2
所以,格拉姆角场可以理解为带惩罚项的内积,请见下式:
G A F = G = [ c o s ( ϕ i + ϕ j ) ] = X ~ ′ ⋅ X ~ − I − X ~ ′ 2 ⋅ I − X ~ 2 GAF=G=[cos(\phi_i+\phi_j)]\\=\tilde X^{'}\cdot\tilde X-\sqrt{I-\tilde X^{'2}}\cdot \sqrt{I-\tilde X^2} GAF=G=[cos(ϕi+ϕj)]=X~′⋅X~−I−X~′2⋅I−X~2
补充一下,在这种内积定义下的GAF称为GASF,既Gramian Angular Summation Fields;而另外一种称为GADF(Gramian Angular Difference Fields),其内积定义为:
G A F = G = [ s i n ( ϕ i − ϕ j ) ] = I − X ~ ′ 2 ⋅ X ~ − X ′ I − X ~ 2 GAF=G=[sin(\phi_i-\phi_j)]\\=\sqrt{I-\tilde X^{'2}}\cdot \tilde X-X^{'}\sqrt{I-\tilde X^2} GAF=G=[sin(ϕi−ϕj)]=I−X~′2⋅X~−X′I−X~2
下图展示了转换过程:
最后一个值得思考的问题就是如果是想把时序数据转换为二维空间数据,是否可以直接使用Gram Matrix。
上图显示了余弦时序数据的Gram Matrix的密度分布和对应的Gram Matrix。从其密度分布上看有些类似于均值为0的正态分布,而Gram Matrix所表示的图像中充满了噪声。因为数据越接近于正态分布,Gram Matrix越很难与高斯白噪声进行区分。正态分布的出现其实很容易理解,下图展示了(x, y) ∈ R² , z 为x, y的内积的3D展示,
时序数据的数值在[-1,1]之间呈现均匀分布时,Gram Matrix中的值也会呈现正态分布。但正态分布对于我们在结果数据上应用卷积神经网络是非常不利的,所以GAF采用了带惩罚性的内积。下图帮助我们理解一下,
⟨ x , y ⟩ = x ⋅ y − 1 − x 2 1 − y 2 \langle x,y \rangle = x\cdot y-\sqrt{1-x^2}\sqrt{1-y^2} ⟨x,y⟩=x⋅y−1−x21−y2
惩罚项使均值指向-1,而且 x x x 和 y y y 越趋近于 0,惩罚项越大;当 x = y x=y x=y 使,结果值为-1。最重要的作用是使结果远离高斯噪声。
最后分享一张动图帮助大家理解,