图拉姆角场将时间序列数据转化为图像的代码
图拉姆角场(Gramian Angular Fields, GAF)是一种将时间序列数据转换为图像的方法,它包括两种主要形式:Gramian Angular Summation Field (GASF) 和 Gramian Angular Difference Field (GADF)。这种方法通过将时间序列数据映射到极坐标系,并计算各数据点之间的角度和内积,生成对称矩阵来表示时间序列。
以下是一个使用 Python 及其主要科学计算库(如 NumPy 和 Matplotlib)来实现将时间序列数据转换为 GAF 图像的代码示例:
首先,确保你已经安装了所需的 Python 库。如果还没有安装,请使用以下命令安装:
pip install numpy matplotlib
以下是一个完整的示例代码,包括时间序列数据的预处理、极坐标转换、计算 GASF 和 GADF 以及生成图像:
import numpy as np import matplotlib.pyplot as plt def min_max_scaling(ts): """Min-Max scaling to [0, 1] range""" min_val = np.min(ts) max_val = np.max(ts) scaled_ts = (ts - min_val) / (max_val - min_val) return scaled_ts def polar_encoding(ts): """Convert the time series to polar coordinates""" scaled_ts = min_max_scaling(ts) phi = np.arccos(scaled_ts) return phi def gaf(ts, method='summation'): """ Convert a time series to Gramian Angular Field (GAF). Parameters: - ts: The input time series - method: 'summation' for GASF, 'difference' for GADF """ phi = polar_encoding(ts) gaf = None if method == 'summation': gaf = np.cos(np.outer(phi, phi) + np.outer(phi, phi)) elif method == 'difference': gaf = np.sin(np.outer(phi, phi) - np.outer(phi, phi)) return gaf def plot_gaf(gaf, title='Gramian Angular Field'): """Plot the GAF image""" plt.imshow(gaf, cmap='rainbow', origin='upper') plt.colorbar() plt.title(title) plt.show() # 示例时间序列数据 ts = np.sin(np.linspace(0, 2 * np.pi, 100)) # 计算 GASF 和 GADF gaf_summation = gaf(ts, method='summation') gaf_difference = gaf(ts, method='difference') # 绘制 GAF 图像 plot_gaf(gaf_summation, title='GASF') plot_gaf(gaf_difference, title='GADF')
时间序列预处理:
min_max_scaling(ts)
polar_encoding(ts)
生成 GAF:
gaf(ts, method='summation')
绘制 GAF 图像:
plot_gaf(gaf, title='Gramian Angular Field')
运行上述代码将生成两个图像,一个是 GASF,另一个是 GADF。这些图像可以用于进一步的时间序列分析或作为输入到深度学习模型中进行分类、预测等任务。
通过这种方式,你可以将时间序列数据转换为图像形式,为基于图像的深度学习模型提供新的数据表示形式。