TSNE 高维数据可视化

TSNE 高维数据可视化

标签: python 机器学习 神经网络


在神经网络中,我们最后一层一般都是高纬度的数据,但是有时候我们可能想看一下这些高纬度数据的分布情况,这个时候就需要用TSNE,其实TSNE本质上就是先利用PCA降维,比如降到二维或者三维,做法就是把神经网络某层的特征降维,然后映射到二维或者三维空间可视化。这样就能看到各层特征分布情况。

TSNE降维

from sklearn.manifold import TSNE
tsne = TSNE(perplexity=30, n_components=2, init='pca', n_iter=5000) # TSNE降维,降到2
# 只需要显示前500个
plot_only = 500
# 降维后的数据
low_dim_embs = tsne.fit_transform(last_layer.data.numpy()[:plot_only, :])
# 标签
labels = by.numpy()[:plot_only]
plot_with_labels(low_dim_embs, labels,"epoch{}_step{}".format(e,step))

这里用的数据是之前pytroch进行mnist中的,last_layer代表最后一层特征,这里降到了2维,by代表一个批次的y,为了后面可视化可以区分,plot_with_labels是一个自定义方法,用来可视化降维后的数据。

可视化


from matplotlib import cm
def plot_with_labels(lowDWeights, labels,i):
    plt.cla()
    # 降到二维了,分别给x和y
    X, Y = lowDWeights[:, 0], lowDWeights[:, 1]
    # 遍历每个点以及对应标签
    for x, y, s in zip(X, Y, labels):
        c = cm.rainbow(int(255/9 * s)) # 为了使得颜色有区分度,把0-255颜色区间分为9分,然后把标签映射到一个区间
        plt.text(x, y, s, backgroundcolor=c, fontsize=9)
    plt.xlim(X.min(), X.max())
    plt.ylim(Y.min(), Y.max()); plt.title('Visualize last layer')

    plt.savefig("{}.jpg".format(i))

可视化就是把前面降维过的数据画到二维空间,这里的关键点在于同一类别的用同种颜色画,体现在代码c = cm.rainbow(int(255/9 * s))以及backgroundcolor=c上面,这样的话如果两个点的标签同,那么绘制的颜色也是一样的。

下图是一个epoch后的分布情况可以看出数据已经很有区分性了:

在这里插入图片描述

  • 18
    点赞
  • 131
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
当你想要将高维的结构化数据进行可视化时,t-SNE (t-Distributed Stochastic Neighbor Embedding) 是一个很常用的方法。t-SNE 可以将高维数据映射到一个低维空间(通常是二维或三维),以便于可视化。 在 Python 中,你可以使用 scikit-learn 库来进行 t-SNE 的计算和可视化。以下是一个使用 t-SNE 进行三维可视化的示例代码: ```python import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from sklearn.manifold import TSNE # 假设你的结构化数据存储在一个名为 data 的二维数组中,每行代表一个样本 data = np.array([[...], [...], ...]) # 使用 t-SNE 进行降维,将高维数据映射到三维空间 tsne = TSNE(n_components=3, random_state=42) embedded_data = tsne.fit_transform(data) # 创建一个三维图形对象 fig = plt.figure() ax = fig.add_subplot(111, projection='3d') # 绘制散点图,以第一列为 x 坐标,第二列为 y 坐标,第三列为 z 坐标 ax.scatter(embedded_data[:, 0], embedded_data[:, 1], embedded_data[:, 2]) # 显示图形 plt.show() ``` 在这个示例中,你需要将你的结构化数据存储在一个名为 `data` 的二维数组中。然后,你可以使用 `TSNE` 类来进行 t-SNE 的计算,通过设置 `n_components` 参数为 3,将数据映射到三维空间。最后,使用 `scatter` 函数绘制三维散点图,并通过 `show` 函数显示图形。 记住,这只是一个示例代码,你需要根据你的具体数据进行相应的修改和调整。希望这个示例可以帮助到你!如果你有任何问题,请随时问我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值