t-SNE数据可视化

什么是t-SNE ?

t-SNE 的全称为 t-distributed Stochastic Neighbor Embedding ,t-分布随机近邻嵌入。

t-SNE 可用于高维度数据的可视化。它将数据点之间的相似性转换为联合概率,并尝试最小化低维嵌入和高维数据的联合概率之间的KL散度(Kullback-Leibler divergence)。t-SNE的成本函数不是凸的,即使用不同的初始化我们可以得到不同的结果。

当待降维的数据维度过高时,建议使用其他的降维方法将数据降至合适的维度。例如使用主成分分析(PCA)处理密集数据,使用截断奇异值分解(TruncatedSVD)处理稀疏数据。这样将会在降维过程中抑制噪声的影响,并且加快样本之间成对距离的计算。

使用方法

>>> import numpy as np
>>> from sklearn.manifold import TSNE
>>> X = np.array([[0, 0, 0], [0, 1, 1], [1, 0, 1], [1, 1, 1]])
>>> X_embedded = TSNE(n_components=2).fit_transform(X)
>>> X_embedded.shape
(4, 2)

简单来说,整个过程如下:

  • 准备数据。整理你的数据 X,使其成为一个 m×n 的 np.array,其中 m 为样本个数,n 为样本的维度。无论你的数据是语音、文本、图像,都需要将其转换成展开的形式,成为一行向量。
  • 实例化TSNE。使用sklearn实例化一个TSNE,设置好降维后的维度 t ,(通过设置 n_components=t 来实现)。其他的参数可以查看文档,进一步了解。
  • 降维。使用实例化的TSNE进行降维操作,一般调用的是 fit_transform 方法,转换完成后,输出一个降维的 np.array ,此时他的形状为 m×t 。
  • 可视化。降维后的数据,你可以使用 matplotlib 进行可视化,显示到二维坐标上,或者三维空间坐标上。

参考资料

原文地址:https://www.cnblogs.com/gshang/p/14187705.html