如何在一个可视化图中绘制两组高维数据以进行比较?

问题描述

我正在尝试比较我从GAN(Generated Adversarial Network)生成的样本(即MNIST数字图像)。 对于我的第一个实验,GAN训练没有成功,因此生成的样本与真实的MNIST图像并不相似。 对于我的第二个实验,GAN训练非常成功,因此生成的样本应与可视化图中的真实MNIST样本很好地重叠。

enter image description here

上面的示例图显示了我希望实现的目标: (1)第一张图显示了原始的真实图像分布 (2)第二张图显示GAN1的结果与真实数据没有很好的重叠 (3)第三张图表明GAN2的结果与真实数据有很好的重叠。

有人可以提供一些指导吗?用Python绘制类似内容并提供示例代码的好方法是什么?

解决方法

您可以尝试使用PCAt-SNELLEUMAP之类的降维方法将图像的尺寸缩小为2并在绘制图像时已经指出了。

这是python中的一些示例代码:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.manifold import TSNE
X_real = ... # real images e.g. 1000 images as vectors 
X_gan = ... # generated images from GAN with same shape
X = np.vstack([X_real,X_gan]) # stack matrices vertically
X_pca = PCA(n_components=50).fit_transform(X) # for high-dimensional data it's advisible to reduce the dimension first (e.g. 50) before using t-SNE
X_embedded = TSNE(n_components=2).fit_transform(X_pca)

# plot points with corresponding class and method labels
plt.scatter(...)

您可以直接使用PCA或上述其他方法之一来代替t-SNE。