t-SNE 是什么?把高维数据画成二维散点图的可视化方法
t-分布随机近邻嵌入(t-Distributed Stochastic Neighbor Embedding,t-SNE)是一种用于数据可视化的非线性降维方法,由 Laurens van der Maaten 和 Geoffrey Hinton 在 2008 年提出。它能够把高维的数据,比如有几百甚至几千个维度的数据,映射到二维或三维的空间中,画成散点图,让人能直观地看到数据中的结构,特别是哪些数据点聚在一起形成了群组。
为什么需要它
在机器学习中,数据常常是高维的:一张 28 乘 28 像素的手写数字图片有 784 个维度,一个词向量可能有几百个维度,神经网络中间层的特征可能有上千个维度。人类只能直观地理解二维或三维的空间,无法直接“看到”高维数据的样子。降维方法就是把高维数据压缩到低维,同时尽量保留数据中重要的信息。经典的主成分分析(PCA)是一种线性降维方法,它擅长保留数据整体的、大尺度的结构,但对于复杂的、非线性的数据分布,往往不能很好地展示出其中的聚类。t-SNE 则专门擅长保留数据的局部结构:在高维空间中彼此相近的点,在低维的图上也会靠在一起。
它是怎么做的
t-SNE 的基本思路分为几步。第一步,在高维空间中衡量相似度:对于每一对数据点,根据它们之间的距离计算一个“相似概率”,距离越近,概率越高。这里用的是以每个点为中心的高斯分布,并且会根据每个点周围数据的密集程度调整分布的宽窄,这由一个叫“困惑度”的参数来控制,它大致相当于考虑每个点周围有多少个近邻。第二步,在低维空间中随机地放置所有的点,并用同样的思路计算它们之间的相似概率,但这里使用的是 t 分布,这也是名字中“t”的由来。第三步,不断地调整低维空间中各个点的位置,让低维中的相似概率分布尽量接近高维中的分布,衡量两者差距的指标是 KL 散度,用梯度下降来进行优化。
为什么低维空间中要用 t 分布?t 分布比高斯分布有更“厚”的尾部,也就是说,对于距离较远的点,它给出的相似概率下降得更慢。这让在高维中只是中等距离的点,在低维中可以被放得更远一些,从而解决了“拥挤问题”:把高维数据压到低维时,没有足够的空间来容纳所有点的距离关系,各个群组容易挤成一团。使用 t 分布后,不同的簇能够更清楚地分开。这是 t-SNE 相比于它的前身 SNE 的关键改进。
怎么正确地解读 t-SNE 图
t-SNE 生成的图很直观,但也很容易被误读,需要注意几点:图中簇与簇之间的距离通常没有意义,两个簇隔得远,并不一定说明它们在原始空间中差别更大;簇的大小也没有意义,一个簇看起来更大,不代表它的数据更分散;结果受困惑度等参数的影响很大,不同的参数可能得到看起来很不一样的图,应该尝试多组参数;每次运行的结果可能不同,因为初始位置是随机的;它主要用于可视化和探索,而不适合作为后续机器学习任务的特征。
应用和替代方法
t-SNE 被广泛用于观察神经网络学到的特征是否能区分不同的类别,可视化词向量中语义相近的词是否聚在一起,以及在生物学的单细胞测序研究中识别不同类型的细胞。它的缺点是计算比较慢,难以处理非常大的数据集,虽然有 Barnes-Hut 等加速算法。2018 年提出的 UMAP 方法速度更快,并且能更好地保留数据的全局结构,在很多场合成为了 t-SNE 的替代选择。