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

问题描述 投票:0回答:1

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

上面的例子图展示了我希望达到的效果:

  1. 第一张图为原始真实图像分布
  2. 第二张图显示GAN1的结果与真实数据没有很好的重叠
  3. 第三张图表明GAN2的结果与真实数据重叠得很好

有人可以提供一些指导,什么是使用 Python 绘制此类内容的好方法,并使用以下代码片段作为示例数据/代码(取自here)提供一些代码来绘制?

from sklearn.manifold import TSNE
from keras.datasets import mnist
import seaborn as sns
import pandas as pd 
(x_train, y_train), (_ , _) = mnist.load_data()
x_train = x_train[:3000]
y_train = y_train[:3000]
x_mnist = reshape(x_train, [x_train.shape[0], x_train.shape[1]*x_train.shape[2]])
tsne = TSNE(n_components=2, verbose=1, random_state=123)
z = tsne.fit_transform(x_mnist)
df = pd.DataFrame()
df["y"] = y_train
df["comp-1"] = z[:,0]
df["comp-2"] = z[:,1]

sns.scatterplot(x="comp-1", y="comp-2", hue=df.y.tolist(),
                palette=sns.color_palette("hls", 10),
                data=df).set(title="MNIST data T-SNE projection")
machine-learning visualization pca mnist dimensionality-reduction
1个回答
2
投票

您可以尝试使用降维方法,如 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。

© www.soinside.com 2019 - 2024. All rights reserved.