t-SNE主要是用来对数据降维,它的应用范围很广。为了简单起见,以下是t-SNE将2维数据降到一维的例子。
如果你只是简单地将数据投影到其中一个坐标轴,你会得到一堆杂乱地数据,原来数据间的分团信息也丢失了。
t-SNE 本质上来说就是要找到一个投影方法,使得降维后,数据之间的分团信息得以保存。
那么t-SNE是如何做的呢?假设我们将这些点以一个随机的顺序排放在x轴上。
此后,t-SNE 开始移动这些点,直到它们聚集成团。
对于第一个点,它应该要移到到哪里去呢?是往左移一点还是往右移一点?
由于它是属于红色cluster,因此它被移动到离那些红点更近的地方。
与此同时,蓝色与橙色的点会因在高维空间中离该点较远而被驱散,向左移。
这样的话,红色的点就会聚集起来,而橙色和蓝色的点就分开。
到了第二个点,也是同样的方式移动。
每一步(对应于其中一个点),低维空间中的这个点都会被其高维空间中的邻近点所吸引,同时被高维空间中不近邻的点驱散。
最后变成这样:
现在我们来看看细节吧。
1、在高维空间中定义点的相似度。每个点与其他任何的点的相似度。
然后,以该点为中心,计算距离的分布(通常为正太分布)。
使用正太分布,使得那些离它很远的点,相似度很低。
距离近的点有较高的相似度。
最后,我们就得到了感兴趣的点与其他所有点之间的相似度。
然后我们需要将未归一化的相似度,做归一化。为啥需要做归一化呢?因为正太分布的宽度取决于点之间的稠密程度,
那么不同区域的点就对应了不同宽度的正太分布。而归一化可以消除这样的差异。
如下图,在相似度未归一化的情况下,上面的相似度值是下面的两倍。
做了归一化后,两者的相似度相差不多。
这就使得不同稠密程度的团,拥有大概一致的相似度度量。
现在,我们回到原始的高维空间。计算不同黑点到其他每个点的相似度。
由于正太分布的宽度是取决于周围点的稠密程度,所以不同的点对应的分布的形状会有不同。故A到B的相似度并不等于B到A的相似度。
这并不是什么大问题,只需要取两者的平均数作为这两个方向的相似度就可以得到一个对称的相似度矩阵。