上一篇文章,我们介绍了SNE降维算法,SNE算法可以很好地保持数据的局部结构,该算法利用条件概率来衡量数据点之间的相似性,通过最小化条件概率 pj|i 与 pi|j 之间的 KL-divergence,将数据从高维空间映射到低维空间。
Symmetric SNE
SNE算法利用的是条件概率,我们也可以利用联合概率,衡量两个空间 � 与 � 的联合概率分布的 KL-divergence,假设高维空间 � 的联合概率分布为 Pi,低维空间 � 的联合概率分布为 Qi,可以定义两者的 KL-divergence 为
C=KL(P||Q)=∑i∑jpijlogpijqij
同样的 pi|i=0, qi|i=0,因为 pij=pji, qij=qji,所以把这种形式的SNE称为 symmetric-SNE,我们可以定义联合概率 pij 以及 qij 为:
pij=exp(−∥xi−xj∥2/2σ2)∑k≠lexp(−∥xk−xl∥2/2σ2)
qij=exp(−∥yi−yj∥2)∑k≠lexp(−∥yk−yl∥2
联合概率的一个问题在于当数据点 xi 离其它的数据点都很远的时候,意味着 pij 会是一个非常小的值,这样映射的低维空间对应的点 yi 对 cost function 的影响也会很小,yi 将很难被其它点确定。为了解决这个问题,这里定义的联合概率由条件概率来确定 pij=pj|i+pi|j2, 我们可以进一步地定义梯度:
∂C∂yi=4∑j(pij−qij)(yi−yj)
t-SNE
t-SNE 就是利用一个 student-distribution 来表示低维空间的概率分布:
qij=(1+∥yi−yj∥2)−1∑k≠l(1+∥yk−yl∥2)−1(4)
而高维空间的联合概率分布依然用高斯函数来拟合,我们可以得到梯度表达式为:
∂C∂yi=4∑j(pij−qij)(yi−yj)(1+∥yi−yj∥2)−1(5)
这个算法的流程图如下所示
这个算法的源代码可以在作者的网站上下载:
https://lvdmaaten.github.io/tsne/