最近做推荐的时候想可视化自己的代码嵌入,便于观察数据分布。于是乎做了一个最简单的tsen降维嵌入可视化。代码如下:
import numpy as np
from sklearn.neighbors import KernelDensity
from matplotlib.colors import LinearSegmentedColormap
from sklearn.manifold import TSNE
import numpy as np
import matplotlib.pyplot as plt
out = self.model.forward_graphcl(data) # gcn out你的卷积生成嵌入
out = out.cpu().detach().numpy() # 将张量从GPU复制到CPU并转换为NumPy数组
# 加载你的嵌入数据
embedded_data = out # 你的嵌入数据,应该是一个 Numpy 数组
# 运行 t-SNE 降维
tsne = TSNE(n_components=2, perplexity=30, random_state=0)
embedded_data_tsne = tsne.fit_transform(embedded_data)
# 运行 KDE 估计密度
kde = KernelDensity(bandwidth=0.2, kernel='gaussian')
kde.fit(embedded_data_tsne)
density_estimation = np.exp(kde.score_samples(embedded_data_tsne))
# 创建颜色映射,将密度映射到颜色
cmap = LinearSegmentedColormap.from_list('density_cmap', ['lightblue', 'darkblue'], N=256)
# 可视化 t-SNE 降维结果和密度估计
plt.figure(figsize=(10, 8))
plt.scatter(embedded_data_tsne[:, 0], embedded_data_tsne[:, 1], c=density_estimation, cmap=cmap)
plt.title('t-SNE Visualization with Density Estimation')
plt.xlabel('Dimension 1')
plt.ylabel('Dimension 2')
plt.colorbar(label='Density')
plt.show()
plt.savefig('xxx.png')
以上代码是最简单的嵌入可视化,会有伴随密度的颜色变化。后续看情况出其他的可视化方法,复制即可用!