论文阅读:《Time Series Generative Adversrial Networks》(TimeGAN,时间序列GAN)

《Time Series Generative Adversarial Networks》提出了一种结合无监督与监督学习的时间序列生成模型TimeGAN,旨在更好地保留时间序列的动态特性。通过引入逐步监督损失,TimeGAN在定性和定量上优于现有SOTA,适用于各种时间序列数据集,表现出色的生成、预测和多样性能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这篇时间序列GAN的论文下载了好久了,但是由于过于复杂,没怎么仔细研读。最近为了进行和自己的GAN对比,找到了他的codebase 准备再仔细读一下,跑一下代码。
《Time Series Generative Adversrial Networks》
作者
JinsungYoon
University of California, Los Angeles, USA jsyoon0823

摘要

一个好的生成模型要保留temporal dynamic(时间动态?)的性质。也就是说,生成的序列能还原原始每个时间步之间的关系。
作者说现在的已经提出的GAN方法还不能很好的保留时间序列特有的时间相关性。
提出了新的GAN框架,号称结合了无监督范式的灵活性和监督训练相结合。
通过结合监督目标和对抗目标共同优化的学习型嵌入空间,让网络在采样过程中遵守动态软约束数据。??不太懂这里
根据经验,我们使用真实和合成的时间序列数据集来评估生成真实样本的方法的能力。 定性和定量地,提出的框架在相似性和预测能力方面优于SOTA。

Introduction

一个好的时序生成模型不仅应该捕捉每个时间步的特征分布,还需要捕捉时间步之间潜在的复杂的关系。

自回归方法

一方面,大量工作关注与提高时间序列自回归模型的temporal dynamic为了序列预测。
自回归模型明确的将时间序列模型,分解为条件分布的乘积:
∏ t p ( X t ∣ X 1 : t − 1 ) \prod_{t}p(X_t|X_{1:t-1}) tp(Xt

### TimeGAN 时间序列生成模型简介 TimeGAN 是一种专门针对时间序列数据生成的任务设计的生成对抗网络 (GAN)[^1]。该方法旨在捕捉时间序列中的复杂动态特性并生成逼真的合成时间序列。 ### 安装依赖项 为了使用 `ydata-synthetic` 库来运行 TimeGAN,首先需要安装必要的 Python 包: ```bash pip install ydata-synthetic tensorflow numpy pandas matplotlib seaborn sklearn ``` ### 数据准备 假设有一个名为 `real_series.csv` 的 CSV 文件作为真实的时间序列数据源。此文件应包含一列或多列数值型时间序列数据。 加载和预处理这些数据如下所示: ```python import pandas as pd from sklearn.preprocessing import MinMaxScaler # 加载原始时间序列数据 df = pd.read_csv('real_series.csv') # 对每一列应用最小最大缩放器 scaler = MinMaxScaler() scaled_data = scaler.fit_transform(df.values) print(f'Loaded and scaled data shape: {scaled_data.shape}') ``` ### 初始化 TimeGAN 模型 创建一个 TimeGAN 实例,并配置其超参数设置: ```python from ydata_synthetic.synthesizers.gan import TimeGAN seq_len = 24 # 输入序列长度 n_features = df.shape[1] # 特征数量等于 DataFrame 列数 timegan_model = TimeGAN(model_parameters={ 'hidden_dim': 24, 'num_layers': 3, 'gamma': 1, # 超参 gamma 控制重建损失权重 }, seq_len=seq_len, n_features=n_features) ``` ### 训练过程 训练阶段涉及将实际观测到的时间序列馈送到模型中以优化生成器和判别器性能: ```python batch_size = 128 epochs = 50_000 timegan_model.train(scaled_data, train_steps=epochs, batch_size=batch_size) ``` ### 合成新样本 完成训练之后,可以利用已学得的知识从随机噪声向量生成新的时间序列实例: ```python synthetic_samples_count = 1000 generated_sequences = timegan_model.sample(n=synthetic_samples_count) # 反变换回原尺度范围 original_scale_gen_seq = scaler.inverse_transform(generated_sequences.reshape(-1, n_features)) ``` ### 结果可视化 最后一步是对生成的结果进行评估,可以通过绘制图表来进行直观比较: ```python import matplotlib.pyplot as plt import seaborn as sns sns.set_theme(style="darkgrid") plt.figure(figsize=(16, 8)) for i in range(min(5, synthetic_samples_count)): # 展示前五个样例 plt.plot(original_scale_gen_seq[i * seq_len:(i + 1) * seq_len], label=f'Synth Sample #{i}') plt.title('Generated vs Real Time Series') plt.xlabel('Timesteps') plt.ylabel('Values') plt.legend() plt.show() ```
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值