TSNE高维向量降维3D可视化

搞深度学习时可能会遇到想可视化神经网络某一层的输出向量的需求,我最近就遇到了这样的需求,需要对网络的降维结果进行可视化,我这里对3D可视化做一下简单的介绍。主要还是参考了网上很多大神的写法。

TSNE和PCA两种方法都可以实现高维向量可视化,两者原理不同,速度也差很多,TSNE会慢一些。
这里主要还是用到了python里的matplotlib库进行图形绘制,就用最简单的MNIST来做说明吧。完整代码

code
import tensorflow as tf
import numpy as np
from sklearn.manifold import TSNE  # TSNE集成在了sklearn中
import matplotlib.pylab as plt
from mpl_toolkits.mplot3d import Axes3D  # 进行3D图像绘制

import input_data  # MNIST的数据操作文件

mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
saver = tf.train.import_meta_graph('model/model.ckpt.meta')  # tensorflow加载神经网络图结构
gragh = tf.get_default_graph()

image_input = gragh.get_tensor_by_name('Placeholder:0')  # 获得图中预定义的输入,即MNIST图像
label_input = gragh.get_tensor_by_name('Placeholder_1:0')  # 获得对应图像的标签
predict = gragh.get_tensor_by_name('fco/BiasAdd:0')  # 获得网络的输出值

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())

    saver.restore(sess, tf.train.latest_checkpoint("model"))  # tensorflow恢复神经网络参数到当前图

    # 方便快速计算,只取训练集前面2000个数据进行可视化。
    pre = sess.run(predict,
                   feed_dict={image_input: mnist.test.images[:2000, :], label_input: mnist.test.labels[:2000, :]})

    # TSNE进行降维计算,n_components代表降维维度
    embedded = TSNE(n_components=3).fit_transform(pre)

    # 对数据进行归一化操作
    x_min, x_max = np.min(embedded, 0), np.max(embedded, 0)
    embedded = embedded / (x_max - x_min)

    # 创建显示的figure
    fig = plt.figure()
    ax = Axes3D(fig)
    # 将数据对应坐标输入到figure中,不同标签取不同的颜色,MINIST共0-9十个手写数字
    ax.scatter(embedded[:, 0], embedded[:, 1], embedded[:, 2],
               c=plt.cm.Set1(np.argmax(mnist.test.labels[:2000, :], axis=1) / 10.0))

    # 关闭了plot的坐标显示
    plt.axis('off')
    plt.show()

3D可视化效果图,不同颜色代表不同的数字类别

在这里插入图片描述

### 回答1: 好的,关于t-SNE降维Python可视化,我可以给您提供以下的代码示例: ```python from sklearn.manifold import TSNE import matplotlib.pyplot as plt # 加载数据并进行t-SNE降维 X_tsne = TSNE(n_components=2, random_state=33).fit_transform(X) # 可视化 plt.figure(figsize=(10, 10)) plt.scatter(X_tsne[:, 0], X_tsne[:, 1], c=y) plt.axis('off') plt.show() ``` 其中,`X`是一个形状为`(n_samples, n_features)`的特征矩阵,`y`是一个形状为`(n_samples,)`的标签向量。`TSNE`是`scikit-learn`中的一个用于进行t-SNE降维的类,其中`n_components`参数指定了降维后的维度数,`random_state`参数指定了随机种子。 在上面的代码中,我们使用t-SNE将原始数据降到了二维,并使用`matplotlib`进行可视化。具体来说,我们使用`scatter`函数将每个样本在二维空间中的坐标绘制出来,并根据其标签进行了着色。最后,调用`axis('off')`函数可以去除坐标轴,使可视化结果更加美观。 ### 回答2: t-SNE降维是一种常用的机器学习方法,它可以将高维数据降维到二维或三维空间中进行可视化。t-SNE是指t-Distributed Stochastic Neighbor Embedding的缩写,它考虑了样本之间的相似度,并将相似的样本映射到降维空间中的相邻位置。 在Python中,我们可以使用scikit-learn库的t-SNE模块来进行t-SNE降维。首先,我们需要将数据准备好,确保数据格式正确并且进行了必要的预处理。然后,我们可以使用t-SNE类创建一个t-SNE对象,并使用fit_transform方法传入数据进行降维计算。这个方法返回降维后的数据。 接下来,我们可以使用matplotlib库来进行数据的可视化。我们首先创建一个图形对象,并使用scatter方法来绘制数据点。我们可以选择不同的颜色或符号来表示不同的类别或标签。此外,我们还可以添加标题、坐标轴标签等来增加可视化的可读性和信息量。 最后,我们可以使用show方法来显示可视化结果。这样,我们就可以看到降维后的数据在二维或三维空间中的分布情况。这有助于我们理解数据的结构、关系和规律,同时也方便我们进行后续的数据分析和模型构建。 总而言之,通过使用Python中的t-SNE模块和matplotlib库,我们可以方便地进行t-SNE降维可视化。这种方法可以帮助我们更好地理解和分析高维数据,同时也为我们的研究和应用提供了有用的工具和技术。 ### 回答3: t-SNE是一种流行的降维方法,通常用于可视化高维数据。在Python中,有多个tsne降维库可供选择,如scikit-learn和UMAP等。以下是使用scikit-learn库进行tsne降维可视化的示例代码: 首先,我们需要导入必要的库和数据集。假设我们有一个包含1000个样本的数据集X,每个样本有100个特征: ``` import numpy as np from sklearn.manifold import TSNE import matplotlib.pyplot as plt # 生成随机数据集 X = np.random.randn(1000, 100) ``` 接下来,我们使用TSNE类进行降维。可以选择不同的参数设置,如降维后的维度(默认为2)、学习率(控制降维的速度)、和Perplexity(控制局部结构的平滑度)等。 ``` # 创建TSNE模型 tsne = TSNE(n_components=2, learning_rate=200, perplexity=30) # 使用TSNE模型进行降维 X_tsne = tsne.fit_transform(X) ``` 完成降维后,我们可以使用Matplotlib库将降维后的数据可视化。这里我们以散点图的形式展示数据的分布: ``` # 可视化降维后的数据 plt.scatter(X_tsne[:, 0], X_tsne[:, 1]) plt.xlabel('Dimension 1') plt.ylabel('Dimension 2') plt.title('t-SNE Visualization') plt.show() ``` 执行以上代码后,将显示一张散点图,其中X轴和Y轴分别代表降维后的第一个和第二个维度。该图可以帮助我们更好地理解数据的结构和聚类情况。 使用tsne降维可视化可以帮助我们更好地理解高维数据,揭示隐藏在数据背后的规律和关系。但需要注意,tsne只能提供一种可视化结果,并不能保证对所有数据都适用。在使用tsne进行降维可视化时,我们应该结合领域知识和其他统计方法综合分析数据。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值