当前位置:首页 > 技术分析 > 正文内容

使用格拉姆角场(GAF)将时间序列数据转换为图像

ruisui883个月前 (02-10)技术分析19

这篇文章将会详细介绍格拉姆角场 (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 之间的向量乘积。

以上图片和介绍来自维基和百度百科,以上就是基本概念的简单介绍,那么咱们开始进入正题。

格拉姆角场

现在我们将朝着这篇文章的主要目标前进,即理解在图像中表示时间序列的过程。 简而言之,可以通过以下三个步骤来理解该过程。

  1. 通过取每个 M 点的平均值来聚合时间序列以减小大小。 此步骤使用分段聚合近似 ( Piecewise Aggregation Approximation / PAA)。
  2. 区间[0,1]中的缩放值。
  3. 通过将时间戳作为半径和缩放值的反余弦(arccosine)来生成极坐标。 这杨可以提供角度的值。
  4. 生成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的说明。

引用

  1. Wang, Z., & Oates, T. (2015). Imaging time-series to improve classification and imputation. IJCAI International Joint Conference on Artificial Intelligence, 2015-January, 3939–3945.
  2. 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.
  3. pyts.readthedocs

作者:Pankaj Chejara

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/1869.html

标签: timestamp转换
分享给朋友:

“使用格拉姆角场(GAF)将时间序列数据转换为图像” 的相关文章

医疗养老收费管理系统

医疗养老收费管理系统headerfooter《医疗养老收费管理系统》是最新开发的适用于养老保险收费行业的管理系统。主要功能:1.基本信息:单位设置、缴费基数、缴费比例和队别设置;2.医疗保险管理:医疗保险人员信息、医疗保险收费、医疗保险信息查询、医疗保险收费查询、医疗保险收费情况;3.养老保险信息:...

react hooks自定义组件居然能这样做

前言  这里写一下如何封装可复用组件。首先技术栈 react hooks + props-type + jsx封装纯函数组件。类组件和typeScript在这不做讨论,大家别白跑一趟。接下来会说一下封装可复用组件的思路,比如一个新手应该怎么去封装,都需要有哪些东西。  然后说一些复杂组件需要的功能,...

java调用API操作GitLab

最近需要在一个WEB项目中集成GitLab,用到了GitLab的API操作,在网上找了很久都是说直接调用GitLab的Http接口,而且API官方只有javadoc没有其它说明文档,特别记录下,以备查询。这里采用Token的认证方式,因此需要先登陆GitLab新建一个Token,创建方式如下:创建完...

迁移GIT仓库并带有历史提交记录

迁移git仓库开发在很多时候,会遇到一个问题。GIT仓库的管理,特别是仓库的迁移。我需要保留已有的历史记录,而不是重新开发,重头再来。我们可以这样做:使用--mirror模式会把本地的分支都克隆。// 先用--bare克隆裸仓库 git clone git@gitee.com:xxx/testApp...

面试被逼疯:聊聊Python Import System?

面试官一个小时逼疯面试者:聊聊Python Import System?对于每一位Python开发者来说,import这个关键字是再熟悉不过了,无论是我们引用官方库还是三方库,都可以通过import xxx的形式来导入。可能很多人认为这只是Python的一个最基础的常识之一,似乎没有可以扩展的点了,...

美国民众负债累累 但今年假期消费者支出仍将创下新高

智通财经APP获悉,在迎接假期之际,许多美国人已经背负了创纪录的信用卡债务。然而,今年假期消费者支出仍将创下新高。根据美国零售联合会(NRF)上周发布的报告,预计今年11月1日至12月31日期间的消费总额将达到创纪录的9795亿至9890亿美元之间。NRF首席经济学家Jack Kleinhenz表示...