machine-learning - 如何在一个可视化图中绘制两组高维数据进行比较?
问题描述
我正在尝试比较来自 GAN(生成对抗网络)的生成样本(即 MNIST 数字图像)。对于我的第一个实验,GAN 训练没有成功,因此生成的样本与真实的 MNIST 图像不相似。对于我的第二个实验,GAN 训练非常成功,因此生成的样本应该与可视化图中的真实 MNIST 样本很好地重叠。
上面的示例图显示了我希望实现的目标:(1)第一张图显示了原始的真实图像分布(2)第二张图显示了 GAN1 的结果与真实数据没有很好的重叠(3)第三张图显示GAN2的结果与真实数据有很好的重叠。
有人可以提供一些指导,什么是用 Python 绘制这样的东西的好方法,并提供一些示例代码?
解决方案
您可以尝试使用PCA、t-SNE、LLE或UMAP等降维方法将图像的维度减少到 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。
推荐阅读
- javascript - 在 d3 力模拟中,有没有办法强制远离某些固定点?
- version - OpenLayers 版本 5.3.0,地图导出 pdf 的问题
- python - Pipeline GridSearchCV,不同步骤对应的参数
- hive - 如何将本地蜂巢连接到雪花?
- javascript - 如何在反应中将歌曲分块流式传输到音频播放器
- r - 使用 R 或 Pyspark 仅使用多个分隔符实例拆分一次
- java - 如何检查位置是否无效或在 Java 中没有正确的读/写权限
- javascript - 指定的值“NaN”无法解析,或超出范围
- sqlite - 有没有办法通过 WSL2 以可视方式 (GUI) 探索 SQLite DB?
- c++ - 销毁删除是否仍需要可访问析构函数?