t SNE學習筆記

2021-09-30 13:52:09 字數 1979 閱讀 6388

拜讀了這位大神的筆記,有些一開始不太明白的地方,寫個筆記記下來。

1.1基本原理

sne是通過仿射(affinitie)變換將資料點對映到概率分布上,主要包括兩個步驟:

sne構建乙個高維物件之間的概率分布,使得相似的物件有更高的概率被選擇,而不相似的物件有較低的概率被選擇。

sne在低維空間裡在構建這些點的概率分布,使得這兩個概率分布之間盡可能的相似。

我們看到t-sne模型是非監督的降維,他跟kmeans等不同,他不能通過訓練得到一些東西之後再用於其它資料(比如kmeans可以通過訓練得到k個點,再用於其它資料集,而t-sne只能單獨的對資料做操作,也就是說他只有fit_transform,而沒有fit操作)

sne在低維空間裡在構建這些點的概率分布,這句話什麼意思呢?

然後我在二維或者三維空間隨機撒n個點,這些點也可以表示成距離和相似度矩陣。好吧,這裡有兩個矩陣了,也就是兩個概率分布,我們要做的就是盡可能的使得,低維度空間中的概率分布去接近高維度的概率分布,所以自然就想到了kl距離。讓兩個分布的kl距離盡快能的小,去優化這個目標,要用到梯度下降,從**的角度來說開始是一些隨機的點,然後經過多次迭代,原空間近的點低維空間也近,原空間遠的點低維空間也遠,當然這是最理想的結果。sne已經能夠取得不錯的效果。

1.2 sne原理推導

sne是先將歐幾里得距離轉換為條件概率來表達點與點之間的相似度。具體來說,給定乙個m個高維的資料 x1

,...

,xm , t-sne首先是計算概率pi

j ,正比於xi

和xj 之間的相似度(這種概率是我們自主構建的),即: p(

j/i)

=exp

(−∣∣x

i−xj

∣∣2/

(2σ2

i))∑

k≠ie

xp(−

∣∣xi−

xk∣∣

2/(2

σ2i)

) 這裡的有乙個引數是σi

,對於不同的點xi

取值不一樣,後續會討論如何設定。此外設定px

∣x=0

,因為我們關注的是兩兩之間的相似度。

那對於低維度下的yi

(最開始我們隨機撒n個點,然後通過梯度下降的方法調整他們的座標,經過若干次迭代,得到乙個降維視覺化的結果),我們可以指定高斯分布為方差為12

√ ,因此它們之間的相似度如下:**

∣i=e

xp(−

∣∣yi−

yj∣∣

2)∑k

≠iex

p(−∣∣

yi−y

k∣∣2

) 同樣,設定qi

∣i=0

如果降維的效果比較好,區域性特徵保留完整,那麼pi

∣j=q

i∣j , 因此我們優化兩個分布之間的距離-kl散度(kullback-leibler divergences),那麼目標函式(cost function)如下: c=

∑ikl

(pi∣∣

qi)=

∑i∑j

pj∣i

logp

j∣iq

j∣i

總的來說sne的思想是,我們有高維空間n個點的向量表示,然後計算出點之間兩兩的距離,也就是相似度,距離越小越相似。也就是乙個n*n的對稱矩陣。

然後我們在低維(2,3)空間隨機初始化n個點,這n個點之間的距離也是乙個n*n的矩陣,也表示點在低維空間的相似度,距離。

最後我們要優化的就是使得這兩個分布(使用高斯分布將距離轉換為概率分布)的kl距離越小越好,也就是這兩個分布越接近越好。

然後每次迭代計算出梯度,更新這些點在低維空間的位置。

而t-sne就是把距離轉換為概率分布的時候用t分布,長尾分布。

它的好處就是

t-sne的梯度更新有兩大優勢:

對於不相似的點,用乙個較小的距離會產生較大的梯度來讓這些點排斥開來。

這種排斥又不會無限大(梯度中分母),避免不相似的點距離太遠。

參考自:

機器學習 t SNE演算法原理

目錄 1.sen原理 2 t sen 2.1 symmetric sne 2.2 crowing 問題 2.3 t sne 2.4 演算法過程 2.5 不足 基本原理 是通放射變換 將資料點對映到概率分布上,分為兩個步驟 t sne是非監督的降維,跟kmeans 等不同,他不能通過訓練得到一些東西後...

Python學習 TSNE視覺化

from sklearn.manifold import tsne tsne tsne tsne.fit transform data zs 進行資料降維 tsne pd.dataframe tsne.embedding index data zs.index 轉換資料格式 import matpl...

python用tsne降維 tSNE降維

我有兩套資料訓練和測試。這兩個資料集分別有30213和30235個專案,每個專案有66個維度。在 我正在嘗試應用scikit learn的t sne將維數降到2。由於資料集很大,如果我試圖一次性處理整個資料,我會遇到記憶體錯誤,我會嘗試將它們分成塊,然後一次轉換乙個塊,如下所示 tsne manif...