t-SNE是一种非常常用的数据降维(数据可视化),基本思想是
SNE直译过来是随机邻域嵌入;
为了衡量高维数据的相似性,用条件概率表示高维样本点间的位置关系:
p j ∣ i = e − ∣ ∣ x i − x j ∣ ∣ 2 2 σ i 2 ∑ k ≠ i e − ∣ ∣ x i − x k ∣ ∣ 2 2 σ i 2 p_{j|i} = \frac{e^{-\frac{||x_i-x_j||^2}{2\sigma_i^2}}}{\sum_{k\neq i} e^{-\frac{||x_i-x_k||^2}{2\sigma_i^2}}} pj∣i=∑k=ie−2σi2∣∣xi−xk∣∣2e−2σi2∣∣xi−xj∣∣2
当然地,当点 i i i与点 j j j的距离越近, p j ∣ i p_{j|i} pj∣i就越大;
我们要考虑映射后的低维空间的数据分布,同样可以用条件概率来表示:
q j ∣ i = e − ∣ ∣ y i − y j ∣ ∣ 2 ∑ k ≠ i e − ∣ ∣ y i − y k ∣ ∣ 2 q_{j|i} = \frac{e^{-||y_i-y_j||^2}}{\sum_{k\neq i} e^{-||y_i-y_k||^2}} qj∣i=∑k=ie−∣∣yi−yk∣∣2e−∣∣yi−yj∣∣2
为了让两个分布更相近,采用KL散度对其进行衡量
C = ∑ i K L ( P i ∣ ∣ Q i ) = ∑ i ∑ j p j ∣ i log p j ∣ i q j ∣ i C = \sum_i KL(P_i||Q_i) = \sum_i\sum_jp_{j|i}\log{\frac{p_{j|i}}{q_{j|i}}} C=i∑KL(Pi∣∣Qi)=i∑j∑pj∣ilogqj∣ipj∣i
调整 y y y最小化C,实现降维
根据上面的公式会得到 p j ∣ i ≠ p i ∣ j p_{j|i} \neq p_{i|j} pj∣i=pi∣j,改进方法
p i j = e − ∣ ∣ x i − x j ∣ ∣ 2 2 σ i 2 ∑ k ≠ l e − ∣ ∣ x l − x k ∣ ∣ 2 2 σ i 2 q i j = e − ∣ ∣ y i − y j ∣ ∣ 2 ∑ k ≠ l e − ∣ ∣ y l − y k ∣ ∣ 2 p_{ij} = \frac{e^{-\frac{||x_i-x_j||^2}{2\sigma_i^2}}}{\sum_{k\neq l} e^{-\frac{||x_l-x_k||^2}{2\sigma_i^2}}} \\ q_{ij} = \frac{e^{-||y_i-y_j||^2}}{\sum_{k\neq l} e^{-||y_l-y_k||^2}} pij=∑k=le−2σi2∣∣xl−xk∣∣2e−2σi2∣∣xi−xj∣∣2qij=∑k=le−∣∣yl−yk∣∣2e−∣∣yi−yj∣∣2
简单来说就是把分母变成所有点两两距离之和;
但是会有更好的方法保证对称:
p i j = p i ∣ j + p j ∣ i (保证对称) p i j = p i j ∑ i ∑ j p i j (保证归一化) p_{ij} = p_{i|j} + p_{j|i} \text{(保证对称)}\\ p_{ij} = \frac{p_{ij}}{\sum_i\sum_jp_{ij}} \text{(保证归一化)}\\ pij=pi∣j+pj∣i(保证对称)pij=∑i∑jpijpij(保证归一化)
从高维到低维进行转换的过程中,低维点的距离无法建模高维点之间的位置关系,有可能高维空间中距离较大的点,在低维空间距离会变得较小;
换言之,哪怕高维空间中离得较远的点,在低维空间中留不出这么多空间来映射。于是到最后高维空间中的点,尤其是远距离和中等距离的点,在低维空间中统统被塞在了一起,这就叫做“拥挤问题(Crowding Problem)
高维空间保持高斯分布不变,将低维空间的分布做调整,使得两边尾巴比高维空间的高斯分布更高,即可缓解拥挤问题;
q i j = ( 1 + ∣ ∣ y i − y j ∣ ∣ 2 ) − 1 ∑ k ≠ l ( 1 + ∣ ∣ y k − y l ∣ ∣ 2 ) − 1 q_{ij} = \frac{(1+||y_i-y_j||^2)^{-1}}{\sum_{k\neq l}(1+||y_k-y_l||^2)^{-1}} qij=∑k=l(1+∣∣yk−yl∣∣2)−1(1+∣∣yi−yj∣∣2)−1
假设我们的低维数据分布对高维数据分布已经拟合完毕,则可以认为对于高维数据点 x i 、 x j x_i、x_j xi、xj和低维映射点 y i 、 y j y_i、y_j yi、yj,有 p i j = q i j p_{ij}=q_{ij} pij=qij。我们用图中两条红线表示两种情况:
设置一个固定的参数: Perplexity表示分布的熵,设法调节每个 σ i \sigma_i σi,使得
log ( P e r ) = − ∑ j p j ∣ i log ( p j ∣ i ) \log(Per) = -\sum_j p_{j|i}\log(p_{j|i}) log(Per)=−j∑pj∣ilog(pj∣i)
根据 p j ∣ i p_{j|i} pj∣i的计算公式,距离 x i x_i xi小于 2 σ 2\sigma 2σ的点对p的计算起主要作用,故
对mnist手写数据集做t-sne数据降维
t-sne有以下缺点
t-sne与UMAP的对比