You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ydata-synthetic的TimeGAN生成时序数据整数输入输出为小数求助

TimeGAN生成整数时序输出为小数的问题排查与解决

问题根因

  • TimeGAN基于生成对抗网络实现,神经网络的输出层默认使用连续型激活函数(如Sigmoid、Tanh),原生输出就是浮点数值,不会直接生成整数
  • 原代码缺少输入数据归一化预处理、生成数据逆转换步骤,且训练步数仅设置为10步,模型尚未收敛,无法拟合原始整数的分布特征

修复方案

1. 补充数据预处理与后处理逻辑

训练前先将原始0600000的整数归一化到01区间,生成数据后先做逆缩放,再通过取整操作转换为整数

2. 调整训练参数

将训练步数提升到1000步及以上,保证模型充分拟合数据分布

3. 修改后完整代码

from os import path
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

from ydata_synthetic.synthesizers import ModelParameters
from ydata_synthetic.synthesizers.timeseries import TimeGAN
import torch

# 原始整数数据
arr_data = np.random.randint(0,600000,(100,1))
# 记录原始数据的最大最小值用于逆转换
data_min = arr_data.min()
data_max = arr_data.max()
# 将数据归一化到0-1区间
norm_data = (arr_data - data_min) / (data_max - data_min)

# TimeGAN参数
seq_len=20
n_seq = 1  # 列数
hidden_dim=24
gamma=1
noise_dim = 32
dim = 128
batch_size = len(norm_data) - seq_len
learning_rate = 5e-4

gan_args = ModelParameters(batch_size=batch_size,
                           lr=learning_rate,
                           noise_dim=noise_dim,
                           layers_dim=dim)

# 构造时序样本
lst_temp = []
for i in range(0,len(norm_data) - seq_len):
    _x = norm_data[i:i+20]
    lst_temp.append(_x)
lst_rand_data = np.array(lst_temp)

synth = TimeGAN(model_parameters=gan_args, hidden_dim=24, seq_len=seq_len, n_seq=n_seq, gamma=1)
# 调整训练步数为1000
synth.train(lst_rand_data, train_steps=1000)
synth_data = synth.sample(len(lst_rand_data))

# 生成数据逆缩放+取整转为整数
synth_data = (synth_data * (data_max - data_min) + data_min).round().astype(int)

print(synth_data.shape)
cols = ['Car price']

for j, col in enumerate(cols):
    df = pd.DataFrame({'Real': arr_data[-seq_len:, j],'Synthetic': synth_data[-1][:, j]})
    
df.plot(title = "Car price",secondary_y='Synthetic data', style=['-', '--'])
print(df)

效果说明

修改后生成的synth_data就是符合0~600000范围的整数时序数据,且分布特征和原始数据对齐。

内容的提问来源于stack exchange,提问作者seounggue kang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 23:27:01