这篇文章将会具体介绍格拉姆角场(Gramian Angular Field),并通过代码示例展现“如何将工夫序列数据转换为图像”。
Gramian Angular Summation / Difference Fields (GASF / GADF)能够将工夫序列转换成图像,这样咱们就能够将卷积神经网络 (CNN) 用于工夫序列数据
基本概念
在开始介绍之前,我认为首先咱们应该相熟一下 GASF / GADF 的基本概念。如果您曾经晓得,能够跳过本节。
笛卡尔坐标:笛卡尔坐标系(Cartesian coordinates,法语:les coordonnées cartésiennes)就是直角坐标系和斜坐标系的统称,相交于原点的两条数轴,形成了立体仿射坐标系。如两条数轴上的度量单位相等,则称此仿射坐标系为笛卡尔坐标系。两条数轴相互垂直的笛卡尔坐标系,称为笛卡尔直角坐标系,否则称为笛卡尔斜角坐标系。点(或其余几何形态)的地位由一个或多个数字确定。例如,如果咱们采纳二维坐标系,则地位由一对数字确定,例如 (2,3)。而后在距两条参考线(称为 x 轴和 y 轴)的间隔上显示该地位。
极坐标:属于二维坐标零碎,创始人是牛顿,次要利用于数学畛域。极坐标是指在立体内取一个定点 O,叫极点,引一条射线 Ox,叫做极轴,再选定一个长度单位和角度的正方向(通常取逆时针方向)。设想一个以原点为核心的圆,它与点 (2,3) 相交。咱们求这个圆的半径以及 x 轴与 (0,0) 和(2,3)连线的夹角。在极坐标中会被示意为(3.6,56.3),也就是说是一个间隔极点 3.6 个单位和极轴夹角为 56.3°的点
格拉姆矩阵:假如咱们有一组向量 V。格拉姆(Gram)矩阵是来自 V 的每一对向量的内积矩阵。如下图所示,矩阵中的每个元素 < vi, vj> 是向量 vi 和 vj 之间的向量乘积。
以上图片和介绍来自维基和百度百科,以上就是基本概念的简略介绍,那么咱们开始进入正题。
格拉姆角场
当初咱们将朝着这篇文章的次要指标后退,即了解在图像中示意工夫序列的过程。简而言之,能够通过以下三个步骤来了解该过程。
- 通过取每个 M 点的平均值来聚合工夫序列以减小大小。此步骤应用分段聚合近似 (Piecewise Aggregation Approximation / PAA)。
- 区间 [0,1] 中的缩放值。
- 通过将工夫戳作为半径和缩放值的反余弦(arccosine)来生成极坐标。这杨能够提供角度的值。
- 生成 GASF / GADF。在这一步中,将每对值相加(相减),而后取余弦值后进行求和汇总。
语言形容可能不太精确,上面应用代码具体进行解释
Python 中的示例
我在这里提供了一个 Python 示例,以演示应用格拉姆角场将工夫序列转换为图像的逐渐过程的状态。
导入须要的包
from pyts.approximation import PiecewiseAggregateApproximation
from pyts.preprocessing import MinMaxScaler
import numpy as np
import matplotlib.pyplot as plt
生成一些 demo 数据
X = [[1,2,3,4,5,6,7,8],[23,56,52,46,34,67,70,60]]
plt.plot(X[0],X[1])
plt.title(‘Time series’)
plt.xlabel(‘timestamp’)
plt.ylabel(‘value’)
plt.show()
分段聚合迫近和缩放
# PAA
transformer = PiecewiseAggregateApproximation(window_size=2)
result = transformer.transform(X)
# Scaling in interval [0,1]
scaler = MinMaxScaler()
scaled_X = scaler.transform(result)
plt.plot(scaled_X[0,:],scaled_X[1,:])
plt.title(‘After scaling’)
plt.xlabel(‘timestamp’)
plt.ylabel(‘value’)
plt.show()
转换成极坐标
arccos_X = np.arccos(scaled_X[1,:])
fig, ax = plt.subplots(subplot_kw={‘projection’:‘polar’})
ax.plot(result[0,:], arccos_X)
ax.set_rmax(2)
ax.set_rticks([0.5, 1, 1.5, 2]) # Less radial ticks
ax.set_rlabel_position(-22.5) # Move radial labels away from plotted line
ax.grid(True)
ax.set_title(“Polar coordinates”, va=’bottom’)
plt.show()
Gramian angular summation fields
field = [a+b for a in arccos_X for b in arccos_X]
gram = np.cos(field).reshape(-1,4)
plt.imshow(gram)
最初补充
上述步骤用于阐明应用 Gramian Angular Summation / Difference Field 将工夫序列转换为图像的过程。在理论应用时中能够不须要计算极坐标,这是因为以下的三角函数规定:
为了在 Gramian Angular Field 计算中计算 Cos (A + B),咱们将其扩大如下
因为咱们通过取工夫序列值的余弦倒数来计算 A 和 B(实际上是在 PAA 和缩放之后的值上)。其余的阐明能够参考 pyts 库对于 GramianAngularField 的阐明。
援用
- Wang, Z., & Oates, T. (2015). Imaging time-series to improve classification and imputation. IJCAI International Joint Conference on Artificial Intelligence, 2015–January, 3939–3945.
- Eamonn J Keogh and Michael J Paz- zani. Scaling up dynamic time warping for datamining applications. In Proceedings ofthe sixth ACM SIGKDD international conference on Knowledge discovery and data mining, pages 285– 289. ACM, 2000.
- https://pyts.readthedocs.io/e…
- https://www.overfit.cn/post/f1a917448ad34b7099e3dc0126a84d35
作者:Pankaj Chejara