尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
格拉姆角场 GAF 实战:Python 代码 5 步将时间序列转为图像,适配 CNN 分类
格拉姆角场实战5步Python代码实现时间序列到图像的智能转换时间序列数据在金融、医疗、物联网等领域无处不在但传统的分析方法往往难以捕捉其复杂的时空特征。而格拉姆角场Gramian Angular Field, GAF技术为我们打开了一扇新窗——将一维时间序列转化为二维图像让卷积神经网络CNN的图像识别能力得以施展。本文将手把手带您实现从原始数据到GAF图像的完整流程包含数据预处理、极坐标转换和矩阵生成的每个技术细节。1. 环境准备与数据预处理在开始GAF转换前我们需要搭建合适的Python环境并准备好示例数据。推荐使用Anaconda创建虚拟环境conda create -n gaf_env python3.8 conda activate gaf_env pip install numpy matplotlib pyts scikit-learn对于演示数据我们使用模拟的股票价格时间序列。真实场景中这可能是传感器读数、ECG信号或任何时序数据import numpy as np import matplotlib.pyplot as plt # 生成示例时间序列 np.random.seed(42) timestamps np.arange(0, 100) values np.cumsum(np.random.randn(100)) 100 plt.figure(figsize(10,4)) plt.plot(timestamps, values) plt.title(原始时间序列数据) plt.xlabel(时间戳) plt.ylabel(数值) plt.show()关键预处理步骤数据清洗处理缺失值和异常点归一化将值域缩放到[-1, 1]区间降采样使用PAA减少数据量注意归一化是GAF的关键步骤不当的缩放会导致角度计算错误2. 分段聚合近似(PAA)降维长时间序列直接转换会产生超大图像我们先用PAA进行降维from pyts.approximation import PiecewiseAggregateApproximation # 原始数据形状(1, 100) X values.reshape(1, -1) # 设置窗口大小为5将100点降为20点 paa PiecewiseAggregateApproximation(window_size5) X_paa paa.transform(X) # 可视化对比 plt.figure(figsize(10,4)) plt.plot(X[0], o--, label原始数据(100点)) plt.plot(np.arange(2.5, 100, 5), X_paa[0], o-r, labelPAA降维(20点)) plt.legend() plt.title(分段聚合近似(PAA)效果对比) plt.show()PAA参数选择建议窗口大小保留特征计算效率适用场景小(2-5)细节丰富较低高频信号中(5-10)平衡中等一般时序大(10)趋势保留高长期预测3. 极坐标转换时间序列的新视角将缩放后的数据转换为极坐标系是GAF的核心创新from pyts.preprocessing import MinMaxScaler # 缩放到[-1,1]区间 scaler MinMaxScaler(feature_range(-1, 1)) X_scaled scaler.transform(X_paa) # 极坐标转换 phi np.arccos(X_scaled[0]) # 角度 r np.linspace(0, 1, len(phi)) # 半径(时间) # 极坐标可视化 fig plt.figure(figsize(8,8)) ax fig.add_subplot(111, projectionpolar) ax.plot(phi, r, o-) ax.set_title(时间序列的极坐标表示, pad20) plt.show()极坐标转换的数学原理值→角度φ arccos(x), x∈[-1,1]时间→半径r (t - t_min)/(t_max - t_min)技术细节arccos函数在[-1,1]是单调的保证了转换的可逆性4. 生成格拉姆角场矩阵基于极坐标生成两种GAF矩阵def generate_gaf(phi): 生成GASF和GADF矩阵 cos_phi np.cos(phi) sin_phi np.sin(phi) # 格拉姆角和场(GASF) gasf cos_phi.reshape(-1, 1) cos_phi.reshape(1, -1) - sin_phi.reshape(-1, 1) sin_phi.reshape(1, -1) # 格拉姆角差场(GADF) gadf sin_phi.reshape(-1, 1) cos_phi.reshape(1, -1) - cos_phi.reshape(-1, 1) sin_phi.reshape(1, -1) return gasf, gadf gasf, gadf generate_gaf(phi) # 可视化 fig, (ax1, ax2) plt.subplots(1, 2, figsize(12,5)) ax1.imshow(gasf, cmaprainbow) ax1.set_title(GASF矩阵) ax2.imshow(gadf, cmaprainbow) ax2.set_title(GADF矩阵) plt.tight_layout() plt.show()GAF矩阵特性对比特性GASFGADF数学形式cos(φi φj)sin(φi - φj)对角线值cos(2φi)0时间相关性强中等适用场景周期性分析突变检测5. 端到端GAF生成管道将上述步骤封装为可复用的管道from sklearn.pipeline import Pipeline from pyts.preprocessing import MinMaxScaler from pyts.approximation import PiecewiseAggregateApproximation class GramianAngularField: def __init__(self, methodsum): self.method method def transform(self, X): phi np.arccos(X) if self.method sum: return np.cos(phi[:, None] phi[None, :]) else: return np.sin(phi[:, None] - phi[None, :]) # 构建管道 gaf_pipeline Pipeline([ (paa, PiecewiseAggregateApproximation(window_size5)), (scaler, MinMaxScaler(feature_range(-1, 1))), (gaf, GramianAngularField(methodsum)) ]) # 应用管道 X_gasf gaf_pipeline.fit_transform(values.reshape(1, -1)) # 保存结果 plt.imsave(gasf_image.png, X_gasf[0], cmaprainbow)管道优化技巧动态调整PAA窗口大小尝试不同的颜色映射(cm
RELATED

相关推荐

Astropy坐标转换实战:3种天体坐标系互转与10万级星表匹配

Astropy坐标转换实战:3种天体坐标系互转与10万级星表匹配

Astropy坐标转换实战:3种天体坐标系互转与10万级星表匹配1. 天体坐标系基础与Astropy实现原理天文学研究中,坐标系转换是最基础却至关重要的操作。想象一下,当你需要将哈勃望远镜观测的星系位置与射电望远镜数据对齐时,就像要把分…

📅 2026/8/26 7:09:09
个人微信API二次开发,遇到React Native就瞎了?难道没逆向过Hermes字节码与AST重构吗?

个人微信API二次开发,遇到React Native就瞎了?难道没逆向过Hermes字节码与AST重构吗?

在个人微信API二次开发的广阔水域中,很多开发者在处理传统的原生界面(如使用 C 和 Java 编写的聊天主界面)时游刃有余。然而,微信作为一个庞大的超级 App,其内部集成了大量的动态化模块(例如视频号、看一看…

📅 2026/8/25 19:53:33
3种灰色预测模型对比:传统/新信息/新陈代谢 GM(1,1) 误差平方和选型指南

3种灰色预测模型对比:传统/新信息/新陈代谢 GM(1,1) 误差平方和选型指南

灰色预测模型实战选型指南:传统、新信息与新陈代谢GM(1,1)的深度对比 当面对小样本数据预测时,传统统计方法往往束手无策,而灰色预测模型却能展现出惊人的适应性。在实际项目中,数据科学家经常面临一个关键决策:三种主…

📅 2026/7/11 16:34:18
MORE NEWS

更多资讯

📰

大模型不擅长选股,却能治好你的手痒?AI交易心态陪练实操指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

CMSIS-FreeRTOS源码审计:嵌入式实时系统中的隐性开销与安全陷阱

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

OmniRoute 多模型统一网关:路由策略与故障切换实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

Java死锁全解析:从底层原理到jstack诊断与根治方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

静态代码分析工具盘点:SonarQube、ESLint、Pylint等实战对比

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

OpenMontage 视频翻译指南:基于 HeyGen /v2/video_translate 的多语言配音与口型同步实战

OpenMontage 视频翻译指南:基于 HeyGen /v2/video_translate 的多语言配音与口型同步实战 【免费下载链接】OpenMontage Worlds first open-source, agentic video production system. 12 production pipelines, 100 tools, 700 agent skill and production-knowled…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬