使用TimeGAN建模和生成时间序列数据( 二 )


#Alsodecidesoutput_unitsforgenerator
gamma=1#Usedfordiscriminatorloss
noise_dim=32#Usedbygeneratorasastarterdimension
dim=128#UNUSED
batch_size=128
learning_rate=5e-4
beta_1=0#UNUSED
beta_2=1#UNUSED
data_dim=28#UNUSED
#batch_size,lr,beta_1,beta_2,noise_dim,data_dim,layers_dim
gan_args=[batch_size,learning_rate,beta_1,beta_2,noise_dim,data_dim,dim]
现在我们已经生成了synth_data , 让我们看看它与原始数据对比可视化 。 我们可以为28个特征中的每一个做一个图 , 看看它们随时间步长的变化 。
使用TimeGAN建模和生成时间序列数据
文章图片
由于这些图只是粗略的展示 , 可能对比较没有什么特别帮助 。 但是我们看到 , 合成数据肯定与原始(真实)数据不同 。 考虑到数据集有如此多的特性 , 也很难直观地将它们可视化和解释在一起 。 现在我们更深入的比较数据集 , 这样可以让我们进行更深入的理解二者之间的关系 。
评估和可视化
我们可以利用以下两种大家都知道的可视化技术:
PCA——主成分分析
t-SNE—t-分布式随机邻居嵌入
这些技术背后的基本思想是应用降维来可视化那些具有大量维度(即大量特征)的数据集 。 PCA和t-SNE都能够实现这些 , 它们之间的主要区别在于PCA试图保留数据的全局结构(因为它着眼于在整个数据集中保留全局数据集方差的方式) , 而t-SNE试图保留局部结构(通过确保原始数据中靠近的点的邻居在降维空间中也靠近在一起) 。
对于我们的用例 , 我们将使用来自sklearn的PCA和TSNE对象 。
fromsklearn.decompositionimportPCA
fromsklearn.manifoldimportTSNE
sample_size=250
idx=np.random.permutation(len(energy_data))[:sample_size]
#Convertlisttoarray,buttakingonly250randomsamples
#energy_data:(list(19711(ndarray(24,28))))->real_sample:ndarray(250,24,28)
real_sample=np.asarray(energy_data)[idx]
synthetic_sample=np.asarray(synth_data)[idx]
#Forthepurposeofcomparisonweneedthedatatobe2-Dimensional.
#ForthatreasonwearegoingtouseonlytwocomponentsforboththePCAandTSNE.
#synth_data_reduced:{ndarray:(7000,24)}
#energy_data_reduced:{ndarray:(7000,24)}
synth_data_reduced=real_sample.reshape(-1,seq_len)
energy_data_reduced=np.asarray(synthetic_sample).reshape(-1,seq_len)
n_components=2
pca=PCA(n_components=n_components)
tsne=TSNE(n_components=n_components,n_iter=300)
#Thefitofthemethodsmustbedoneonlyusingtherealsequentialdata
pca.fit(energy_data_reduced)
#pca_real:{DataFrame:(7000,2)}
#pca_synth:{DataFrame:(7000,2)}
pca_real=pd.DataFrame(pca.transform(energy_data_reduced))
pca_synth=pd.DataFrame(pca.transform(synth_data_reduced))
#data_reduced:{ndarray:(14000,24)}
data_reduced=np.concatenate((energy_data_reduced,synth_data_reduced),axis=0)
#tsne_results:{DataFrame:(14000,2)}
tsne_results=pd.DataFrame(tsne.fit_transform(data_reduced))
现在要绘制的数据已经准备好了 , 我们可以使用matplotlib绘制原始转换和合成转换 。 pca_real和pca_synth一起给出了PCA结果 , 而tsne_results包含了原始和合成t-SNE转换 。
使用TimeGAN建模和生成时间序列数据
文章图片
这些图告诉我们什么?它们向我们展示了如果将整个数据集转换为具有较少特征的数据集(两个轴对应于两个特征) , 那么整个数据集可能是这样的 。 PCA图可能不足以得出一个正确的结论 , 但t-SNE图似乎告诉我们 , 原始数据(黑色)和合成数据(红色)似乎遵循类似的分布 。 此外 , 一个对特定数据集的观察是 , 在整个数据集中有7组(集群) , 它们的数据点(明显)彼此相似(因此聚在一起) 。
总结
使用TimeGAN建模和生成时间序列数据