TSNE是由SNE衍生出的一種算法,SNE最早出現在2002年,它改變了MDS和ISOMAP中基于距離不變的思想,将高維映射到低維的同時,盡量保證互相之間的分布機率不變,SNE将高維和低維中的樣本分布都看作高斯分布,而Tsne将低維中的坐标當做T分布,這樣做的好處是為了讓距離大的簇之間距離拉大,進而解決了擁擠問題。從SNE到TSNE之間,還有一個對稱SNE,其對SNE有部分改進作用。
- SNE算法
- 對稱SNE算法
- TSNE算法(***)
1、SNE 高維資料用X表示,Xi表示第i個樣本,低維資料用Y表示,則高維中的分布機率矩陣P定義如下:
P(i,j)表示第i個樣本分布在樣本j周圍的機率。delta是依據最大熵原理來決定,entropy=sum(pi*log(pi)),以每個樣本點作為中心的delta都需要使得最後分布的熵較小,通常以log(k)為上限,k為你所決定的鄰域點的個數。 低維中的分布機率矩陣計算如下:
這裡我們把低維中的分布看作是均衡的,每個delta都是0.5,由此可以基本判斷最後降維之後生成的分布也是一個相對均勻的分布。 随機給定一個初始化的Y,進行優化,使得Y的分布矩陣逼近X的分布矩陣。我們給定目的函數,用KL散度來定義兩個不同分布之間的差距:
則可以計算梯度為:
每次梯度下降的步長可設定固定或者自适應、随機等,也可以加上一個動量的梯度,初始值一般設為1e-4的随機正态分布。
2、對稱SNE 顧名思義,就是讓高維和低維中的機率分布矩陣是對稱的,能友善運算,但是對擁擠問題無改進。
同樣采用KL散度作為兩個分布之間的差異标準,隻是梯度有一些改變:
3、TSNE TSNE對高維中的分布采用對稱SNE中的做法,低維中的分布則采用更一般的T分布,也是對稱的,我們可以發現sum(P)=sum(Q)=1。
TSNE算法流程如下:
自TSNE極大改良了SNE,但它們都有一個非常通用的毛病,耗時耗力。樣本較多時,建構網絡及其困難,梯度下降太慢,TSNE的程式及可視化見下一篇,TSNE的改良Largevis見下下篇。